Disclosure: StackScout may earn a commission if you purchase through links on this page. This does not affect our evaluations.

Contents

The Notion API Integrations Guide for B2B Teams (2026): Workers, OAuth, and the Build-vs-Buy Decision

By Ken Hayashi 14 min read
Notion API integrations architecture overview with Workers, OAuth, and external tools

TL;DR

Notion's May 2026 Developer Platform release changed the math on building integrations: Workers (a hosted runtime) and the External Agents API now sit alongside the classic REST API, while OAuth and Internal Integrations remain the entry points for everything else.

For most B2B teams, the answer is "buy a no-code platform first, build only what you must". Activepieces and Make cover ~80% of cross-tool workflows at <$30/mo. Build with the Notion API directly only when you need workspace-native UX, audited compliance flows, or AI agents that act inside the workspace.

The hard part isn't the API — it's the 3 requests/second average rate limit, the block-tree data model, and the fact that "page" and "database row" share an ID space. Skip past those, and most integrations work the first time.

What This Guide Covers — and Who It's For

This guide is for B2B engineering, ops, and product leads who are about to make one of three decisions:

  1. Build a custom integration on the Notion API (or one of the new Workers).
  2. Buy a no-code automation platform — Zapier, Make, n8n, or Activepieces — and point it at Notion.
  3. Both — buy for the long tail of "sync X to Notion" workflows, build for the 2–3 high-leverage flows that need custom logic.

Based on our research across Notion's official documentation, the May 13, 2026 Developer Platform release, and hands-on testing of the four leading automation platforms, here is what's actually true about Notion integrations in 2026 — what the marketing pages skip, what the docs bury, and what we'd tell a customer in a 30-minute scoping call.

What Changed in 2026: The Developer Platform Release

On May 13, 2026, Notion shipped its Developer Platform 3.5, the most significant change to how integrations work since the public API launched in 2021. Three things are new:

1. Workers (hosted runtime)

Workers are a hosted runtime for custom code. You write the code locally (often with a coding agent), deploy via the CLI, and Notion runs it in a secure sandbox attached to your workspace. They sit between "I'll call the API from my own server" and "I'll buy Zapier." Workers are free for developers through August 11, 2026, after which they consume Notion credits.

2. External Agents API

External Agents bring third-party agents — Claude, Codex, Decagon, or anything you build — into Notion as native workspace participants. They appear in the agent list, chat in pages and databases, and can take actions alongside humans. This is the most under-discussed piece: it changes what an integration looks like to end users. The integration is no longer a sidebar bot; it's a teammate.

3. The Notion CLI

A purpose-built command-line interface for developers and coding agents. It can sign into your workspace, read and write pages, build and deploy Workers, and is intended to be driven by AI coding agents as well as humans.

What this means for build-vs-buy: If you previously decided "we'll buy Zapier because building means hosting our own server," Workers eliminates the hosting reason. The remaining "build" reasons are now logic reasons, not infrastructure reasons — which makes the comparison cleaner.

The Three Integration Types You Need to Know

Before you write a line of code, decide which of these you're building. The choice determines authentication, distribution, and what your users see in their workspace.

Internal Integration

Scoped to a single workspace. The integration's owner generates a Bearer token in notion.so/my-integrations and uses it server-to-server. Best for: internal tools, BI pipelines, "sync our CRM into our team workspace" jobs. No OAuth flow. The token lives in your secrets manager.

Public Integration (OAuth 2.0)

Distributable to any Notion workspace. You ship an OAuth flow: the user clicks "Connect Notion," picks the pages/databases they want to share, and you receive a workspace-scoped access token. Required for any SaaS product that talks to customers' Notion accounts. Notion requires a public-facing privacy policy, terms, redirect URI, and support email before it'll switch your app to public.

Worker (new in May 2026)

Custom code that runs inside Notion's sandbox, deployed via the CLI. Useful when you want low-latency reactions to workspace events without operating a server. Still in early adoption — production Workers are appropriate for internal/enterprise use first.

Diagram comparing Internal Integration, Public OAuth Integration, and Worker integration types on Notion
The three integration shapes in 2026. Pick once at the start — switching later is painful.

Setting Up Your First Integration (Step-by-Step)

This walkthrough covers the most common case: an Internal Integration that reads and writes a database. You can follow it in ~10 minutes.

1

Create the integration

Go to notion.so/my-integrations and click + New integration. Give it a name, pick your workspace, and choose capabilities (Read content, Update content, Insert content, Read user info). Save and copy the Internal Integration Secret — it starts with secret_ or ntn_.

2

Connect the integration to a page or database

This is the step everyone forgets. Open the Notion page or database you want the integration to access, click the ••• menu → Connections → search for your integration by name → confirm. Without this step, every API call returns object_not_found even though the integration is "live."

3

Make your first API call

Set the Authorization, Notion-Version, and Content-Type headers. The version header is required; Notion pins your code to a specific schema. As of June 2026 the stable version is 2022-06-28; newer versions exist but the older one stays supported for backward compatibility.

curl -X POST 'https://api.notion.com/v1/databases/<DATABASE_ID>/query' \
  -H 'Authorization: Bearer ntn_xxx...' \
  -H 'Notion-Version: 2022-06-28' \
  -H 'Content-Type: application/json' \
  --data '{
    "filter": { "property": "Status", "select": { "equals": "In Progress" } },
    "page_size": 25
  }'
4

Write back with proper schema

Inserts and updates use the same properties shape returned by query. The single biggest source of validation_error responses is sending a string where the property expects a typed object — for example "Tags": "Marketing" instead of "Tags": { "multi_select": [{ "name": "Marketing" }] }. When in doubt, query the database, copy the property shape from a real row, and edit from there.

Core API Surface (Worth Knowing Before You Build)

The Notion API exposes four object types and a handful of endpoints. You will use four of them constantly.

Endpoint What it does Frequency in real integrations
POST /v1/databases/{id}/query Filter and sort database rows. Pagination via start_cursor. Very high
POST /v1/pages Create a page (often as a row in a database). Very high
PATCH /v1/pages/{id} Update properties on a page/row. High
GET /v1/blocks/{id}/children Read the body content of a page (paragraphs, headings, lists, etc.). Medium
PATCH /v1/blocks/{id}/children Append blocks to a page body. Medium
POST /v1/search Find pages or databases by title. Bounded by what the integration is connected to. Medium
Webhooks (subscriptions) Receive POST callbacks when pages/databases change. Medium and growing

If you're new to the API, our walkthrough of how to read and write Notion databases with Python covers the property-shape gotchas in depth.

Rate Limits: What Actually Matters in Production

The Notion API documents an average of 3 requests per second per integration token. A Notion engineer has publicly clarified that the underlying limit works out to roughly 2,700 calls per 15 minutes. Bursts above 3 r/s are tolerated; sustained traffic above it is not.

Two error codes signal you've hit a wall:

The limits are dynamic: Notion doesn't publish hard ceilings because they flex with system load. In practice, the safe operating envelope for a single integration is:

WorkloadPractical limit per tokenMitigation
One-off backfill (10k rows) 3 r/s sustained, ~55 min total Linear sleep, exponential backoff on 429
Realtime sync (CRM → Notion) ~5–10 writes/s with bursts Queue + batch + dedupe on the producer side
Multi-tenant SaaS (one token per workspace) 3 r/s per tenant Use OAuth so each customer gets their own rate budget
Watch out: If you build a multi-tenant product on a single Internal Integration token, you will hit rate limits at ~10 customers. OAuth isn't just for distribution — it's a rate-limit isolation strategy.

Build vs Buy: The 2026 Honest Comparison

If your team can describe the integration in a sentence ("when a deal closes in HubSpot, create a row in our Notion CRM database with X, Y, Z fields"), you almost certainly do not need to write code. Four no-code platforms cover Notion well in 2026. They differ on price, hosting model, and how comfortable they are once your workflow has more than ~5 steps.

Tool Entry pricing Integrations Self-host option Best for
Zapier $19.99/mo (Starter) 8,000+ No Small teams, broadest catalog
Make $9/mo (Core) 2,000+ No Visual workflows, mid-complexity
n8n $20/mo cloud · free self-hosted 1,500+ Yes (fair-code) Developer-led teams, high volume
Activepieces Free (cloud) · free self-hosted 280+ Yes (MIT) Open-source-first, AI workflows

For a deeper head-to-head, see our hands-on Zapier vs Make comparison from 40 hours of testing and our Activepieces vs Make breakdown for B2B teams.

Quick decision framework

Choose Zapier if you have many one-off "trigger → action" automations across a wide app catalog and your team prefers polished UX over price.

Choose Make if your workflows have branching, loops, and error handling, and you want a visual canvas that scales.

Choose n8n if you have a developer who can run a container, you'll move >10k tasks/month, and you want code nodes inline with the UI.

Choose Activepieces if you want open source under MIT, AI-agent steps as first-class citizens, and zero vendor lock-in.

Make

Visual workflow automation for Notion + ~2,000 other apps

From $9/mo

The best entry point for teams who outgrow Zapier's linear "Zap" model but don't want to run a server. Strong native Notion module with all four CRUD operations.

Pros

  • ~60% cheaper than Zapier at scale
  • Visual branching and error handlers
  • Generous free tier (1,000 ops/mo)

Cons

  • Steeper learning curve than Zapier
  • No self-host option
  • Operations counting can surprise you

Activepieces

Open-source (MIT) Zapier alternative with built-in AI agents

Free self-hosted · $25/mo Plus

The pick if you want to keep data in your own cloud or VPC. 280+ integrations, including a first-class Notion piece. AI agents are a built-in step type, which matters as you start chaining Notion + LLM workflows.

Pros

  • True open source under MIT
  • Self-host with no task limit
  • AI agent steps in core product

Cons

  • Smaller integration catalog than Zapier/Make
  • Cloud Plus plan jumps to $25 fast
  • Younger ecosystem, smaller community

n8n

Developer-friendly automation, self-host or cloud

Free self-hosted · $20/mo cloud Starter

The closest thing to "code in a low-code shell." Inline JavaScript or Python nodes, a real expression language, and ~1,500 integrations. Calls itself "fair-code" — source available, with commercial restrictions, not full OSI open source.

Pros

  • Code nodes inline with the visual flow
  • Self-host removes per-task pricing pain
  • Strong webhook + scheduled-trigger story

Cons

  • "Fair-code" license isn't OSI-approved
  • Cloud pricing climbs fast at scale
  • Steeper than Make for non-developers
Try n8n Cloud

Common Integration Patterns (And How to Build Them)

Three patterns cover ~90% of B2B Notion integration requests we see. They're worth knowing before you commit to a tool — each one has a "buy" answer and a "build" answer.

Pattern 1: One-way sync from system-of-record into Notion

Example: HubSpot deals → Notion CRM database. The source system is canonical; Notion is the team-readable view. Buy first. Every no-code platform handles this in 4–6 clicks. Build only if you need custom field transformations the no-code UI can't express.

Pattern 2: Two-way sync

Example: A status change in Notion needs to update Linear, and vice versa. Build, or buy carefully. The trap is loop prevention — if A updates B, B's webhook fires and updates A, which fires again. Implement a "last writer" idempotency key, debounce, and a circuit breaker. Most no-code platforms can do this with branching, but expect to debug for a day.

Pattern 3: AI agent that operates inside Notion

Example: A weekly digest agent that reads the team's project pages, summarizes status, and posts into a "Weekly Sync" page — plus answers questions when @-mentioned. This is the case for the new External Agents API. The agent shows up as a workspace participant, not a sidebar bot. The build effort is non-trivial, but the UX payoff is large enough that it's usually worth doing in-house rather than gluing together Slack-mentions + Zapier hacks.

Decision flowchart for Notion integration build vs buy options based on workflow complexity
Our scoping flow for "do we build this or buy a no-code tool?" Most requests land on "buy" — and that's fine.

Common Pitfalls (We've Hit All of These)

1. Forgetting to connect the integration to pages

Creating the integration in my-integrations only authorizes it to exist. You also have to explicitly share each parent page or database with it via the page-level Connections menu. Without this, the API returns object_not_found for IDs that clearly exist.

2. Treating property values as strings

Notion properties are typed objects. "Status" isn't a string, it's { "status": { "name": "In Progress" } }. "Owner" isn't a name, it's { "people": [{ "id": "..." }] }. Always inspect a real row's JSON before writing.

3. Pagination assumptions

Database queries return at most 100 rows per page. You must paginate with start_cursor until has_more is false. Plenty of integrations look like they work in test (50 rows) and silently miss data in production (5,000 rows).

4. Skipping the Notion-Version header

Forgetting it doesn't fail in an obvious way — Notion picks a default and your code may receive a slightly different schema than you expect. Always pin to a version (currently 2022-06-28 is the broadly compatible choice).

5. Building on a single Internal Integration for a SaaS product

Tempting because OAuth setup is more work. But your customers' workspaces will share a single rate-limit bucket, which means your slowest customer can starve everyone else. Use OAuth from day one if you're shipping a customer-facing product.

6. Polling when webhooks would do

Webhooks are out of beta for most object types as of 2026. Polling every minute burns rate-limit budget you'll regret when you scale. Subscribe to the events you care about and only poll as a backup.

FAQ

Is the Notion API free to use?

Yes. There's no usage-based fee for API calls themselves — you pay for your Notion plan, and the API comes with it. Workers are free through August 11, 2026 and will then consume Notion credits.

What's the difference between an internal and a public integration?

Internal integrations use a static Bearer token and only work in the workspace that created them. Public integrations use OAuth 2.0 and can be installed by any Notion workspace. If you're building a SaaS product, you need public; if you're building an internal data sync, internal is enough.

Can I use the Notion API without coding?

Yes. Zapier, Make, n8n, and Activepieces all wrap the Notion API behind visual workflows. You point them at your Notion workspace, pick a trigger and an action, and they handle authentication, schema, and rate limits for you.

How do I get a Notion API key?

For an internal integration: go to notion.so/my-integrations, create an integration, and copy the secret token from the configuration screen. For a public integration, you'll receive an OAuth client ID and secret after switching the integration type to "Public" and filling in the required public-facing metadata.

What's the rate limit on the Notion API?

Officially, an average of three requests per second per integration. In practice, that works out to about 2,700 calls per 15-minute window. Notion doesn't publish hard ceilings because limits flex with overall system load. Watch for HTTP 429 (rate_limited) and HTTP 529 (service_overload) responses, and respect the Retry-After header.

Do Notion Workers replace the REST API?

No. Workers complement it. The REST API is still the way you talk to Notion from your own infrastructure. Workers are useful when you want code to run in Notion's sandbox — typically for low-latency reactions to workspace events or when you don't want to operate a server.

Methodology

This guide synthesizes the official Notion API documentation (current to June 2026), the Developer Platform 3.5 release notes (May 13, 2026), and our hands-on use of Zapier, Make, n8n, and Activepieces against real Notion databases. Pricing was verified against each vendor's public pricing page on June 14, 2026. Rate-limit figures come from Notion's published request-limits documentation and corroborating engineering statements. We do not accept paid placements in this guide; affiliate links, where present, are clearly marked and do not influence rankings.

KH
Ken Hayashi

Technology consultant focused on B2B SaaS architecture and integrations. Covers Notion, automation platforms, and HR/finance tooling for StackScout.

Ken Hayashi
Ken Hayashi

Technology consultant with 10+ years in the Japanese tech industry. Specializing in SaaS evaluation, workflow automation, and B2B tool integration.

Related articles

Loading…