Integrations & Plugins

Connect your workflows to hundreds of external services — Stripe, GitHub, Slack, Google, Notion, Airtable, HubSpot, Shopify and many more — without writing integration code. Each service brings a set of actions (do something) and triggers (start a workflow when something happens).

The integrations catalog

Click Browse Integrations (the box icon by the Plugins section of the node palette) to open the catalog. It's organised so it scales to hundreds of services:

  1. Brands — the top level. Vendors with several products (Google, Microsoft) group their services under one tile; single-service vendors are their own tile.
  2. Services — the products within a brand (e.g. Google → Sheets, Drive, Gmail, Calendar).
  3. Operations — the individual actions and triggers a service offers.

Use the search box at any level to jump straight to a service or operation.

Adding an integration to a workflow

  1. From the node palette, drag a service onto the canvas (or pick it in Browse Integrations).
  2. An operation picker opens. At the top you'll see two tabs:
    • Actions — operations that do something (create a charge, send a message, add a row).
    • Triggers — operations that start a workflow when something new appears (only shown for services that have them).
  3. Choose an operation. It drops onto the canvas as a node and its configuration panel opens automatically.

Each node is self-contained: everything it needs to run is stored on the node, so your workflow stays portable and opens instantly.

Actions vs triggers

ActionTrigger
What it doesPerforms an operation on demandStarts a workflow when something new appears
Where it sitsIn the middle of a flowAt the beginning of a flow
InputsTakes input from upstream nodesHas no input — it's the starting point
Examples"Create a charge", "Send a message", "Add a row""New charge", "New issue", "New row"

A trigger node has no input connector — that's how you can tell at a glance that it begins a flow. Try to connect something into it and the editor will refuse.

Connecting your account

Most services need a connection (your credentials) before they can run. Open the node's configuration panel and either:

  • Paste a token / API key — for services that use a key or personal access token, or
  • Connect with OAuth — for services that support it, sign in and authorise Circuitry.

Connections are saved and reused across every node and workflow, so you only set up a service once. Your credentials are stored encrypted and never appear in the workflow itself.

If a node shows "needs a connection", open it and select or create one — that message is there to save you from a confusing error later.

Using triggers

Triggers turn an integration into the start of an automation: "whenever there's a new charge in Stripe, do X", "whenever a new issue is opened in GitHub, do Y".

How they work

A trigger polls the service on a schedule and fires once per new item. It remembers the newest item it has already seen (by a creation time or id), so it only fires for items that are genuinely new — you won't get the same row twice.

Test it before you build: "Fetch latest"

When you open a trigger's configuration you'll see a Fetch latest button. Click it to poll the service once, right now, and the most recent item appears in the node's output. This lets you see the exact shape of the data a trigger will emit — its fields and values — so you can wire up the downstream nodes against real data before the automation ever runs live.

Examples

  • Stripe — New charge: fires for each new payment, ordered by when it was created.
  • GitHub — New issue: fires when an issue is opened in a repository (you choose the owner and repo).
  • Airtable — New record: fires when a row is added to a table.

Using a node's output

Every node's output is available to the nodes after it through template variables. Reference a field with double curly braces:

{{input.amount}}        the "amount" field of the item
{{input.id}}            the item's id
{{input.customer.email}}  a nested field

For a trigger, each fire emits one item, so {{input.<field>}} refers to that new charge / issue / row. Pass those values into the next action — e.g. a "New charge" trigger → a "Send a Slack message" action with A new charge of {{input.amount}} arrived.

Tips & troubleshooting

  • "Needs a connection" — open the node and select or create a connection for that service.
  • A trigger won't accept an input edge — that's by design; triggers start the flow.
  • Some operations need an id (a spreadsheet, a base/table, a repo). Where possible the configuration offers a picker so you choose the resource instead of pasting an id.
  • Don't see a Triggers tab for a service? That service doesn't expose a pollable list yet — it's available as actions only.

Building your own

Need a service that isn't in the catalog yet? Use the Plugin Wizard to add one: describe the API in plain language and Circuitry generates the node for you. It then behaves exactly like any catalog integration.

Next steps