Integrations

Talks to the services you already use

Payments, domain registrars, DNS, Google Workspace and AI: every integration runs on your own account and your own keys, configured per organisation. Nothing routes through us, because there is no "us" — you run the install yourself.

24
connectable
12
categories
4
on the roadmap

Payments

Let clients pay your invoice online; the payment lands as a payment line on the invoice itself.

In preparation

Stripe On the roadmap

The payment layer in schakl. names no provider: there is a protocol each provider fills in, a per-provider account resolver, and a callback address that names its own organisation. Stripe therefore arrives as an added package rather than a rebuild of the part that touches money. There is nothing to configure today; Mollie is the only implementation that exists.

Adyen On the roadmap

Agencies with enterprise clients ask for Adyen, and that is not a payment method but a different provider. Which is exactly why the payment layer in schakl. names no vendor: there is a protocol, a per-provider account resolver, and a callback address that names its own organisation. There is nothing to configure today; Mollie is the only connection that exists.

Not connectable yet. They are listed because the path to them already exists in the code, not because a date does.

Accounting

Push your invoices through to the package your accountant works in.

In preparation

Exact Online On the roadmap

There is no live Exact Online connection yet. What does exist today: every issued invoice and credit note downloads as UBL 2.1, exactly the file Exact Online imports. The seam a real connector plugs into is in place, but no adapter is installed.

Not connectable yet. They are listed because the path to them already exists in the code, not because a date does.

Time registration

Hours written elsewhere kept in step with the hours here, for as long as a cutover lasts.

Domains & DNS

The registrar knows who pays for a domain, the zone knows where it points. schakl reads both.

Websites & monitoring

What runs on a client's site, and whether it is up. Both hang off the website, not off the domain.

WordPress

One password per website: figures, content and agents

Available

One WordPress Application Password per website opens the same host several ways: the ordinary REST API, WordPress 6.9's Abilities API, the MCP server where that plugin is installed, and Rank Math's own AI Visibility route. The last of those supplies a marketing source: how often a brand is named and linked in AI answers. Under the same password an agent reads and edits the pages, media, forms and abilities of every connected site through the wordpress MCP section, with the site as a parameter rather than a tool of its own.

  • The connection hangs off the website, not off the organisation: every client site has its own password
  • Six independent probes on verify, and none of them decides the verdict of the others
  • Rank Math AI Visibility as a marketing source: score, mentions, citations, sentiment and average rank
Read more

Uptime Kuma

Is the site down, and since when

Available

Uptime Kuma is the open-source monitor most agencies already run. Connect it and a monitor becomes a real record: with a client, a website, a profile, an activity trail and a place on the client page beside the domain and the hosting account it depends on. If the client's own Kuma sits behind a firewall it still works: the traffic simply runs the other way.

  • Two kinds of connection: one we manage, and one that only reports to us
  • Profiles instead of retyping the same settings three hundred times
  • What we decided and what we last observed are stored apart, so drift is visible rather than silently overwritten
Read more

Google Workspace

Calendar, Drive, Gmail and Contacts, connected per organisation with your own OAuth credentials.

Microsoft 365

Outlook calendar, OneDrive and Outlook mail, connected per organisation with your own Entra app registration.

Marketing & analytics

The numbers you use to show a client what the work delivered.

Google Analytics 4

Sessions, channels and conversions per client

Available

You link a GA4 property per client, on the client's own page. Every night the daily figures are pulled and stored in your own database, so the panel, the tab and the overview load without calling Google. The link runs on the Google connection a colleague already made, so there is no second login. Apart from the dashboard, Analytics is also an integration of its own: seventeen read routes over both GA4 APIs, as an MCP section of its own for an AI assistant.

  • Sessions, users, new users, key events, engagement and revenue, stored per day
  • A first link backfills roughly 13 months of history
  • Drill-downs by top page, channel, device, key event and referring source
Read more

Google Search Console

Clicks, positions and AI Overviews per client

Available

You link a Search Console property per client on the client's page, either a domain property or a URL prefix. Clicks, impressions, CTR and average position are stored per day, and the movers table shows which queries shifted against the previous period. Impressions in AI Overviews and AI Mode are something Google does not return through its API; they come in through the export of the Generative AI report. And apart from the dashboard, Search Console is a read surface of its own, for an AI assistant too: sitemaps, URL inspection, hourly figures and a free-form query. The same Google consent as Analytics and Ads, so no extra login.

  • Clicks, impressions, CTR and average position, stored per day
  • Top queries, top pages and the biggest movers
  • Impressions in AI Overviews and AI Mode through Google's export button, as a tile, a trend and a report chapter
Read more

SE Ranking

Rankings, audit and visibility in AI answers

Available

SE Ranking is the first marketing source that is not Google, and the connection shows it: it rides an API key for the whole agency instead of a per-employee grant. From a linked SE Ranking project, schakl. stores daily position figures for the dashboard and, per report, fetches the keywords, the latest site audit and the AI Result Tracker. On top of that it reads a client's AI Search overview from SE Ranking's Data API: how often ChatGPT, Perplexity, Gemini and Google's AI answers mention the brand and link to the site, last month against the month before.

  • One key for the whole agency, stored encrypted under Instellingen → Marketing, with an optional second key for the Data API
  • Stored per day: average position, top 3, top 10, top 30 and the number of ranking keywords
  • AI Search overview: brand mentions, links to the site, average position and AI opportunity traffic, last month against the month before
Read more

Google Ads

Spend, clicks and conversions per client

Available

You link a Google Ads account per client and see spend, clicks, impressions, conversions and conversion value beside the Analytics and Search Console figures. If you work from a manager account (MCC), the client accounts beneath it are expanded in the picker. On top of that Google Ads is a working screen of its own: read and change campaigns, search terms, negatives and budgets, with a per-client policy as a guard rail, from here or from an AI assistant. Besides the Google connection, Google Ads asks for one developer token from your agency.

  • Spend, clicks, impressions, conversions and conversion value, stored per day
  • Conversions are re-pulled for 30 days, so a month is only compared once Google has finished it
  • A working screen with campaigns, keywords, search terms, negatives, devices, locations and recommendations
Read more

Google Tag Manager

The client's container, here

Available

Half of an agency's marketing work is making the measuring happen: a conversion on a new form, an event on a quote request, a tag for the campaign that starts on Monday. Until now all of it happened in a browser tab schakl. knew nothing about. Link a client's container and you see what is live, who put it there and when, and which change has been staged for three weeks without ever being published.

  • Editing and publishing are two separate permissions: a key can prepare the measurement without broadcasting it
  • schakl. writes in a workspace of its own, so unfinished work never lands in the client's own draft
  • What you created stays recorded: which tag and trigger together are "quote requested", set up from here, on a date, by a person
Read more

AI & assistants

Your key, your provider, your permissions. With no provider configured there is no AI button anywhere.

Anthropic

Claude behind your AI features, on your key

Available

You put your own Anthropic key into Instellingen → AI (Settings → AI); it is stored encrypted and never played back. Every AI feature switches on and off on its own, from the assistant and the writing assist to e-mail into task and meeting minutes, and a monthly token budget with a live meter keeps the spend visible. For speech to text you pick a second provider alongside, because Anthropic does not transcribe.

  • Your own key, encrypted per organisation, never played back
  • Eight independently switchable features, each with its own model if you like; default model claude-opus-5
  • Usage records counts only, never the text of a prompt or an answer
Read more

OpenAI

GPT-5, plus speech to text for dictation and meetings

Available

The same core as every provider: your own key encrypted per organisation, features that switch on and off independently and one monthly budget with a meter. The built-in default model is gpt-5. OpenAI can also do speech to text, so this lights up the microphone too: in Snel toevoegen (quick add) on Uren, for a new task, in the assistant and when recording a meeting.

  • Your own key, stored encrypted, default model gpt-5
  • Can also do speech to text: dictate hours, tasks and assistant questions, record meetings
  • For meetings gpt-4o-transcribe-diarize, which says who spoke
Read more

OpenAI-compatibel

Your own model, on your own server

Available

Anything that speaks the OpenAI chat API on a base URL of your own: Azure OpenAI, Mistral, or an Ollama or vLLM in your own rack. The Basis-URL (base URL) field is mandatory for this provider; saving without it is a validation error on that exact field. Beyond that, the features, the budget and the meter work exactly as they do with a cloud provider.

  • Azure OpenAI, Mistral, a local Ollama or vLLM: anything speaking the OpenAI chat API
  • Base URL is mandatory here, for example https://ai.example.com/v1
  • Can also do speech to text, if your server implements that endpoint; Mistral's transcription has a speech provider of its own
Read more

Mistral (Voxtral)

Speech to text with speakers, three hours in one go

Available

In schakl., Mistral is a speech provider: Voxtral turns a recording into text, in Dutch, with who spoke and when per segment. It takes three hours of audio in one request, which is why it is the provider we recommend for meetings: a recording that fits in one go keeps one set of speaker labels. The same key also works for dictation on Uren, for a task and in the assistant. For the chat features you pick another provider, or Mistral's chat API through OpenAI-compatible.

  • Speaker labels and timestamps per segment, in Dutch
  • Three hours in one request: a two-hour meeting is not cut into pieces
  • Its own key, stored encrypted, separate from the chat key
Read more

Login & identity

Sign in with the account your agency already has, with two-factor verification on top.

Storage & delivery

Where your files live and which server your mail leaves through.

Automation & API

Anything the app can do, a script can too: one API, typed, with permissions per key.

MCP (Model Context Protocol)

Your own API as a toolset for AI clients, over OAuth or a key

Available

schakl. runs an MCP server at /mcp. Every /api/v1 operation is a tool there, generated from your own instance's OpenAPI spec and proxied in-process back to that same API. A tool call therefore passes through exactly the same gate as the web app: hostname to organisation, RLS bound, permissions resolved. Claude and ChatGPT connect with nothing but the address, over OAuth 2.1; other clients use an API key. Narrower addresses such as /mcp/compact and /mcp/google-ads offer part of the tools, for clients that cannot fit everything in their context.

  • Every /api/v1 operation is a tool, named after the operation: list_companies, create_task, team_time_summary
  • OAuth 2.1 with self-registration: Claude and ChatGPT connect with just the URL, and consent runs on your ordinary session
  • You choose what a connection may do at consent: everything you may do, read only, or choose yourself
Read more

REST API & API-sleutels

One typed API, permissions per key

Available

Everything the app does travels /api/v1: the web app never talks to the database directly, so there is no back door a script misses. The interactive reference sits on your own host at /api/docs, with the OpenAPI document at /api/openapi.json. You authenticate with an API key carrying exactly the permissions you tick.

  • Swagger UI at /api/docs, ReDoc at /api/redoc, the document at /api/openapi.json (signed in, never public)
  • Personal keys per employee, service accounts for integrations that keep running
  • n8n is exactly this: an API key plus HTTP nodes, no separate connector needed
Read more

In preparation

Webhooks On the roadmap

Subscribing to events, with schakl. posting a payload to your URL on every change, is not possible yet. What does ship today: an automation rule can call a webhook on eight triggers, and a notification channel can push messages to a webhook URL. To react to anything else, you poll the API or use MCP.

Not connectable yet. They are listed because the path to them already exists in the code, not because a date does.

Your own keys

Every integration is configured per organisation and stored encrypted. Your agency uses its own account; a client who brings their own Cloudflare or registrar gets their own row. Nothing is ever picked for you.

No lock-in

Switching an integration off removes nothing that is already recorded. Payments that came in stay on the invoice; synced domains stay in your register. schakl stores what it decided and what it last observed in separate columns, so "somebody changed this in the provider's dashboard" shows up as visible drift instead of a silent overwrite.

Missing something?

The integration layer is a seam in the code, not a list: a second payment provider or registrar is one file, not a rebuild. Tell us what you need.

Get in touch Go to the docs

The demo is on its way

The live demo isn't ready yet. We're working hard on it and are excited to share it here as soon as it's done.