API review

Attio API review

Relational, AI-native CRM with a clean REST API (v2): records, lists, notes, tasks, meetings, webhooks, upsert by unique attribute, an Enterprise-only SQL endpoint and an official hosted MCP server, all available on the Free plan except SQL. Best for start-ups and agencies wanting a free/cheap CRM with API, webhooks and MCP on every plan.

Verified 25 Oct 2026 · 9 endpoints listed · Official MCP server

What a call costs

The actions you pay for, as Attio prices them.

ActionCostPer
+5,000 workspace credits$85 monthly / $70 annualper month, add-on (Plus, Pro and Enterprise only; not available on Free)
+10,000 workspace credits$150 monthly / $120 annualper month, add-on (Plus, Pro and Enterprise only; not available on Free)
+25,000 workspace credits$330 monthly / $260 annualper month, add-on (Plus, Pro and Enterprise only; not available on Free)
+50,000 workspace credits$595 monthly / $475 annualper month, add-on (Plus, Pro and Enterprise only; not available on Free)

Pricing, plan by plan

US dollars, as Attio's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.

Free tier Free $0, up to 3 seats, 50,000 records, up to 3 objects (no custom objects), 100 seat credits/user + 250 workspace credits per month; API and webhook access, App SDK, MCP server and workflows included; no credit card

Free

$0

Free

100 seat credits/user/mo + 250 workspace credits/mo; up to 3 seats; 50,000 records; up to 3 objects, no custom objects

API included

Plus

$44/mo

billed monthly

$35/mo

billed annually

Per user/month.

API included
Plan details

500 seat credits/user/mo + 1,500 workspace credits/mo; up to 10 seats; 250,000 records; up to 5 objects but no custom objects

Pro

$99/mo

billed monthly

$79/mo

billed annually

Per user/month.

API included
Plan details

1,000 seat credits/user/mo + 10,000 workspace credits/mo; unlimited seats; 1,000,000 records; up to 12 objects; custom objects, sequences, call intelligence

Enterprise

Custom quote

2,500 seat credits/user/mo; custom workspace credits; unlimited objects and seats; custom records; billed annually

API included

Rate limits

REST: 100 requests/second for reads and 25/second for writes across the whole API, per workspace; 429 with a Retry-After date (usually the next second).

More on limitsLess

Lower per-endpoint limits: SQL 2/s, merge records 5/s, call recordings 1/s, List notes temporarily 10/s (since 2026-09-02). List records and List entries also have score-based limits (per-query complexity score plus a 10-second sliding-window total across all apps and tokens). Every referenced record created inline via target_record_reference counts as one more write. Webhook delivery is capped at 25 requests/second per target URL. MCP tool calls use per-workspace tiers: Read 100/s, Write 25/s, Merge 5/s, Search 300/minute, Semantic search 2/s, Reporting 2/s, SQL 2/s. Our hands-on calls saw no X-RateLimit-* headers on successful responses.

How to get an API key

Attio uses API key. The steps below follow Attio's own docs.

  1. Create a Attio account. The Free plan includes API access.
  2. Single workspace: generate an API key in the developer settings of your app (always workspace-level, scopes set at creation, key does not expire per our /v2/self test); multi-workspace apps: OAuth 2.0 authorization-code flow (workspace- or user-level tokens; user-level requires PKCE)
  3. Send it with every request: header: Authorization: Bearer <token> (HTTP Basic also accepted: token as username, blank password; Bearer recommended).
  4. Make a first call: Upsert a record by a unique attribute (e.g. domains, email_addresses). Keep the key in an environment variable, never in the command.
    curl -X PUT "https://api.attio.com/v2/objects/{object}/records?matching_attribute={attribute}" \
      -H "Authorization: Bearer $ATTIO_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{}'

Where the docs live

WhatWhere
Documentationdocs.attio.com
API referencedocs.attio.com/rest-api/endpoint-reference/openapi.md
OpenAPI specapi.attio.com/openapi/api
llms.txtdocs.attio.com/llms.txt
Changelogdocs.attio.com/changelog/rest-api
Base URLhttps://api.attio.com/v2
MCP serverhttps://mcp.attio.com/mcp
SDKsApp SDK (TypeScript, for building Attio apps)

Strengths and limits

Where it fits

  • Start-ups and agencies wanting a free/cheap CRM with API, webhooks and MCP on every plan
  • Idempotent writes: PUT upsert with matching_attribute (domains for companies, email_addresses for people)
  • Custom objects and lists modelled as relational records
  • Agent access via the hosted MCP at mcp.attio.com/mcp

Where it falls short

  • Bulk loads at speed: no batch record endpoint in the OpenAPI spec, writes capped at 25/second
  • Teams needing custom objects without paying for Pro (Free and Plus: no custom objects; Free up to 3 objects, Plus up to 5)
  • Data sourcing (Attio enriches records it holds, it is not a prospect database)

Worth knowing

8 moreShow fewer
  • Merging two records creates a NEW record id; both originals become unreadable. Re-find the survivor by its natural key (domain/email), never by a pre-merge id. Large merges return 202 and reads 404 (merge_in_progress) until done. Source: docs.attio.com/rest-api/endpoint-reference/records/merge-two-records
  • Search records (POST /v2/objects/records/search) is eventually consistent; do not search-after-create in a loop, use records/query for up-to-date results. Source: api.attio.com/openapi/api
  • Domain values are validated: a filter or write with an invalid TLD (e.g..example) returns 400 'Invalid domain value'.
  • Successful responses carry no X-RateLimit-* headers, so budget the 100/25 per-second limits client-side.
  • Spec server is api.attio.com with /v2 in every path; this record keeps /v2 in base_url and omits it from paths (not doubled). Source: api.attio.com/openapi/api
  • Prices are USD per user per month (monthly vs annual billing; annual saves 20%). The pricing page's own price data also carries EUR/GBP; only the USD values are used here. The SQL endpoint and the query-particle-sql MCP tool are Enterprise only. Source: attio.com/pricing
  • MCP auth is OAuth only (log in as your Attio user, no API key); it is listed in the Claude and ChatGPT connector directories. Source: docs.attio.com/mcp/overview
  • Integrations: Clay and Zapier are confirmed on attio.com/apps; n8n and Make were not confirmed from a vendor page on 2026-10-25 (n8n.io/integrations/attio 404, make.com behind a bot wall), so they are not listed. Source: attio.com/apps/clay; attio.com/apps/zapier

Our take

We compared free CRMs for our own team and Attio Free came out as our first choice: at $0 it includes 3 seats, 50,000 records, the API, webhooks, workflows and an official hosted MCP. The deciding point was deduplication in the API itself: companies are unique on domain and people on email, so a repeated upsert updates the record that already exists.

Who should use it

Use Attio for
Start-ups and agencies wanting a free/cheap CRM with API, webhooks and MCP on every plan
Look elsewhere for
Bulk loads at speed: no batch record endpoint in the OpenAPI spec, writes capped at 25/second

If Attio is not the answer

Other CRM tools in this directory, each with its own review.

Compare Attio with

Before you build

Four things to settle first, each read off Attio's own pages.

  • Confirm the API is on your planThe Free plan includes API access. Free tier: Free $0, up to 3 seats, 50,000 records, up to 3 objects (no custom objects), 100 seat credits/user + 250 workspace credits per month.
  • Keep the key out of your codeAPI key. It is sent as: header: Authorization: Bearer <token> (HTTP Basic also accepted: token as username, blank password; Bearer recommended).
  • Design around the rate limitREST: 100 requests/second for reads and 25/second for writes across the whole API, per workspace; 429 with a Retry-After date (usually the next second).
  • Know the catch before you scaleCreate endpoints throw on unique-attribute conflicts (domains, email_addresses); use the PUT upsert with matching_attribute instead. Source: docs.attio.com/rest-api/endpoint-reference/companies/upsert-a-company-record

Want us to build it for you?

Tell us what you want Attio to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.

Read from attio.com/pricing, docs.attio.com/rest-api/endpoint-reference/openapi.md and docs.attio.com/rest-api/guides/rate-limiting. Verified 25 Oct 2026.

All 9 endpointsFor developers: method, path, what it does and what it costs.

Base URL: api.attio.com/v2

Bulk and async: No batch record endpoint in the OpenAPI spec; target_record_reference can create referenced records inline (each counts as one write). Source: api.attio.com/openapi/api; docs.attio.com/rest-api/guides/linking-referenced-records

Webhooks: Yes, on all plans. Events for records, lists, notes, tasks, comments and (since 2026-10-14) activities; optional JSON filters; signed with Attio-Signature (HMAC-SHA256 of body, duplicated as X-Attio-Signature). Source: docs.attio.com/rest-api/guides/webhooks

9 endpoints
MethodPathWhat it doesCost
PUT/objects/{object}/records?matching_attribute={attribute}Upsert a record by a unique attribute (e.g. domains, email_addresses)none
POST/objects/{object}/records/queryList/filter/sort recordsnone
POST/objects/records/searchFuzzy search across objects (beta; results are eventually consistent, use records/query for up-to-date results)none
POSTasync/objects/{object}/records/mergeMerge two records of the same object (beta). Produces a NEW record; both originals are marked merged and can no longer be read or written; not idempotent (a repeat returns 404)none
PUT/lists/{list}/entriesUpsert a list entry by parent record (pipelines/lists)none
POST/notesCreate a note on a recordnone
POST/tasksCreate a task linked to recordsnone
POST/webhooksSubscribe to record/list/note/task/activity eventsnone
POST/sqlQuery records and lists with SQL (beta, read-only)none