Aircall
This page contains the setup guide and reference information for the Aircall source connector. The connector reads calls, contacts, users, numbers, teams, conversations, campaigns and other company data from the Aircall Public API.
Prerequisites
- An Aircall account with the Admin role. Only Admins can open the Aircall Dashboard, where API keys are created (Users).
- An Aircall API key, made of an API ID and an API token. The connector authenticates every request with Basic authentication, using the API ID as the username and the API token as the password.
Setup guide
Step 1: Set up Aircall
Create an Aircall API key:
- Log in to the Aircall Dashboard as an Admin.
- Go to Integrations & API > API Keys. Aircall's reference calls this the API Keys section of your company's settings.
- Click Add a new API key.
- Copy the API ID and the API token. Aircall doesn't store the token in plain text and can't show it again, so keep it somewhere safe. If you lose it, create a new key (Basic authentication).
Step 2: Set up the Aircall connector in Airbyte
For Airbyte Cloud
- Log in to your Airbyte Cloud account.
- In the left navigation bar, click Sources, then click New source.
- Select Aircall from the list of sources.
- Enter a name for the source.
- Enter your API ID and API Token.
- Optionally, set Window size (days), Contacts window size (days), Concurrent workers and Sync conversation intelligence (AI Assist). See Configuration options.
- Click Set up source.
For Airbyte Open Source
- Open your Airbyte Open Source dashboard.
- In the left navigation bar, click Sources, then click New source.
- Select Aircall from the list of sources.
- Enter a name for the source.
- Enter your API ID and API Token.
- Optionally, set Window size (days), Contacts window size (days), Concurrent workers and Sync conversation intelligence (AI Assist). See Configuration options.
- Click Set up source.
Configuration options
| Field | Required | Description |
|---|---|---|
| API ID | Yes | The API ID of your Aircall API key. |
| API Token | Yes | The API token shown with the API ID when you created the key. |
| Window size (days) | No | Days of calls requested at a time, from 1 to 365. The default is 1. A window that holds more than 10,000 calls is split and partly read again, so a larger window only saves requests for companies with few calls. If a sync fails with could not split its request window, lower this setting. See 10,000-result limit. |
| Contacts window size (days) | No | Days of newly created contacts requested at a time, from 1 to 365. The default is 30. Lower it if a sync fails with the 10,000-results error for contacts. |
| Concurrent workers | No | Number of parallel requests, from 1 to 4. The default is 2. All workers share one rate limit. |
| Sync conversation intelligence (AI Assist) | No | Adds the six conversation intelligence streams. Off by default. They need the AI Assist or AI Assist Pro package and cost one request per call for each selected stream on every sync. |
Connections created before version 0.5.0 also have a Start date. The connector no longer uses it, and the form hides it.
Supported sync modes
The Aircall source connector supports the following sync modes:
| Feature | Supported? |
|---|---|
| Full Refresh Sync | Yes |
| Incremental Sync | Yes |
| Replicate Incremental Deletes | No |
| SSL connection | Yes |
| Namespaces | No |
calls, conversations, conversation_engagements and the six conversation intelligence streams support incremental sync. Each incremental sync reads the last three days again, so use Incremental | Append + Deduped to keep one row per record.
callsusesstarted_at. Calls still in progress and edits made soon after a call reach the destination. Later edits to older calls, such as a tag added weeks later, arrive only with a Refresh and Retain Records sync. Clearingcalls, a Refresh and Remove Records sync or an Overwrite mode deletes calls older than six months for good (see Six months of call history).conversationsuses the time of the last call or message. Closing, reopening or assigning a conversation without a new call or message doesn't change that time, so those changes arrive with the next activity or a full refresh.conversation_engagementsreads the engagements of the conversations thatconversationsreturns, so incremental syncs read only conversations active since three days before the previous sync.- The conversation intelligence streams read the results of the calls that
callsreturns, so incremental syncs read only calls started since three days before the previous sync. Their cursor iscall_started_at, thestarted_atof the call.
Every other stream is full refresh only. Aircall filters some of these lists, such as contacts, numbers and users, by creation date and none of them by update date, so an incremental sync would miss edits to existing records (List all Contacts, List all Numbers).
Supported Streams
| Stream | Sync modes | Primary key | Plan or add-on |
|---|---|---|---|
call_action_items | Full refresh, incremental | call_id, id | AI Assist or AI Assist Pro, opt-in |
call_playbook_results | Full refresh, incremental | id | AI Assist Pro, opt-in |
call_sentiments | Full refresh, incremental | id | AI Assist or AI Assist Pro, opt-in |
call_summaries | Full refresh, incremental | id | AI Assist or AI Assist Pro, opt-in |
call_topics | Full refresh, incremental | id | AI Assist or AI Assist Pro, opt-in |
call_transcriptions | Full refresh, incremental | id | AI Assist or AI Assist Pro, opt-in |
calls | Full refresh, incremental | id | All plans |
campaign_outcomes | Full refresh | id | Outbound Campaigns |
campaigns | Full refresh | id | Outbound Campaigns |
company | Full refresh | None | All plans |
contacts | Full refresh | id | All plans |
conversation_engagements | Full refresh, incremental | id | Conversations API |
conversations | Full refresh, incremental | id | Conversations API |
numbers | Full refresh | id | All plans |
sms_templates | Full refresh | id | All plans |
tags | Full refresh | id | All plans |
teams | Full refresh | id | All plans |
trackers | Full refresh | id | AI Assist or AI Assist Pro |
user_availability | Full refresh | id | All plans |
user_numbers | Full refresh | user_id, id | All plans |
users | Full refresh | id | All plans |
webhooks | Full refresh | webhook_id | All plans |
whatsapp_templates | Full refresh | number_id, id | Numbers registered for WhatsApp |
Notes:
callsincludesivr_options_selected, the IVR options the caller chose (List all Calls). Aircall returns it only for calls from the last two months. Calls synced before version 1.1.0 get it only through a Refresh and Retain Records sync, and only for calls from the last two months. A refresh right after the upgrade loses nothing, because earlier versions never synced the field. A later refresh re-reads calls two to six months old without it, so inIncremental | Append + Dedupedit empties the values synced for those calls while they were recent.companyhas no primary key. Aircall returns a single company object with no identifier (Retrieve Company information).contactsreturns shared contacts only (List all Contacts).usersreads the User V2 API.user_numbersreturns the numbers each user is assigned to, withuser_ididentifying the user. It makes at least one request per user.webhooksuseswebhook_id, the UUID that identifies a webhook. Aircall treats the integeridas the old identifier (List all Webhooks).conversation_engagementsreturns the calls, messages, WhatsApp messages, assignments, unassignments, closes and reopens of each conversation. The first sync and every full refresh make at least one request per conversation. Each incremental sync re-reads the engagements of every conversation active since three days before the previous sync, so syncing more often than daily repeats most of that work.whatsapp_templatesreturns the templates of each number, withnumber_ididentifying the number.
Limitations and troubleshooting
10,000-result limit
Aircall returns at most 10,000 calls, contacts, conversations or engagements for a single query, even with pagination (Pagination, List all Conversations). The connector works around it per stream:
callsare requested one day at a time by default (Window size (days)). A window with more than 10,000 calls is split into smaller time ranges and read again, so some of its calls are sent more than once;Incremental | Append + Dedupedkeeps one row per call.contactsare requested 30 days of creation date at a time (Contacts window size (days)). If a sync fails withAircall returns at most 10,000 contacts per request window, lower that setting. A single day with more than 10,000 new contacts can't be read.conversationscontinue from the time of the last record after every 10,000 records.conversation_engagementsreturns at most the newest 10,000 engagements of a conversation; older ones aren't synced.
Conversation intelligence
The call_transcriptions, call_sentiments, call_topics, call_summaries, call_action_items and call_playbook_results streams exist only when Sync conversation intelligence (AI Assist) is on. They need the AI Assist or AI Assist Pro package; playbook results need AI Assist Pro (Conversation Intelligence). Without the package, a sync that selects them fails with Conversation intelligence needs the AI Assist or AI Assist Pro package, or with Playbook results need the AI Assist Pro package for call_playbook_results. Add the package, or deselect the streams your plan doesn't include. If you turn the option off, also refresh the source schema or deselect the six streams: a sync that still selects them reports them as incomplete.
Each selected stream reads the calls of the sync, reusing the calls responses already fetched in the same sync when the request matches, then makes one request per call. The first sync and every full refresh request every call Aircall keeps (six months). Each incremental sync requests the calls started since three days before the previous sync, so daily syncs request about four days of calls each time. All selected streams share the connector's rate limit of 100 requests per minute, so their times add up: each stream takes about an hour per 6,000 calls. For a company with 1,000 calls a day and daily syncs, each stream adds about 40 minutes to every sync and about 30 hours to the first sync; all six take about 4 hours per sync and about 180 hours (seven and a half days) for the first sync. In incremental sync modes, a first sync that stops early, after a failure or at the platform's sync time limit, resumes from its last checkpoint in the next sync and re-reads the three days of calls before it. In full refresh modes, the next sync starts again with all six months of calls. Select only the streams you need, and in incremental modes select one or two of them for the first sync and add the others in later syncs. Calls with no result, such as missed calls, are skipped with a log message.
Results that change after the call, such as edited action items, reach an incremental sync only while their call is within the three-day lookback. Later changes arrive only with a Refresh and Retain Records sync, as for calls.
Six months of call history
Aircall keeps only six months of call history in the API (List all Calls). The connector reads calls from 365 days back on every full refresh and on the first incremental sync, which covers all the history Aircall keeps. Older calls aren't returned, so syncing calls in an Overwrite mode, clearing it, or running a Refresh and Remove Records sync deletes calls older than six months from the destination for good. Keep calls in Incremental | Append + Deduped, and use Refresh and Retain Records to re-read the last six months. In Incremental | Append + Deduped, that refresh empties ivr_options_selected for calls two to six months old, because Aircall returns it only for calls from the last two months. Copy the calls table before you clear it or change its sync mode.
Rate limit
Aircall allows 120 requests per minute per company, shared by every API key and integration on your Aircall account (Rate limiting). Each sync uses at most 100 of them and, when Aircall rejects a request for exceeding the limit, waits until Aircall resets the counter. Raising Concurrent workers doesn't raise the limit. Aircall Support can raise the limit for your API keys. A higher limit saves the waits when your syncs and other integrations together exceed it, but a single sync still sends at most 100 requests per minute.
Streams that sync no records
Some streams need an Aircall add-on or a specific number setup. When your company doesn't have it, Aircall refuses the requests, and the connector logs a message for each refused request instead of failing the sync:
| Stream | Requirement |
|---|---|
conversations, conversation_engagements | The Conversations API must be enabled for your company (List all Conversations). Without it, each sync still spends one request per 30 days since January 2014 on each of the two streams, about 157 each, so deselect both streams. |
trackers | The AI Assist or AI Assist Pro package (List all Trackers). |
whatsapp_templates | Only numbers registered for WhatsApp return templates (List WhatsApp Templates). |
If a sync fails with Aircall rejected the API ID and API token or Aircall returned HTTP 403, the API key is wrong or was deleted, or your Aircall plan doesn't include that data. Create a new API key and update the source, or check your plan. For the conversation intelligence streams, see Conversation intelligence.
Upgrading to 1.0.0
Version 1.0.0 adds primary keys to calls and contacts, changes the webhooks primary key to webhook_id, makes numbers and teams full refresh only, and changes several column types. Some destinations need a step before you upgrade or before the first 1.0.0 sync: ClickHouse for Full Refresh | Append users (Before you upgrade) and Snowflake for append-mode calls (If you keep an append-mode calls table). After upgrading, refresh the source schema and switch numbers and teams from an Incremental mode to Full Refresh | Overwrite. Clearing calls or switching it to an Overwrite mode deletes calls older than six months for good. Follow the migration guide.
IP allow list
If you use Airbyte Cloud and your organization restricts access to specific IPs, add the Airbyte Cloud IP addresses to your allow list.
Reference
Config fields reference
Changelog
Expand to review
| Version | Date | Pull Request | Subject |
|---|---|---|---|
| 1.1.0 | 2026-11-11 | 92012 | Add user_numbers, IVR options on calls and opt-in conversation intelligence streams |
| 1.0.0 | 2026-11-11 | 90838 | Add primary keys to calls and contacts, key webhooks on webhook_id, make numbers and teams full refresh only, and declare the column types the Aircall API documents |
| 0.6.1 | 2026-11-10 | 91341 | Update dependencies |
| 0.6.0 | 2026-11-09 | 90837 | Add conversations, conversation_engagements, campaigns, campaign_outcomes, trackers, sms_templates and whatsapp_templates streams |
| 0.5.0 | 2026-11-09 | 90835 | Read calls incrementally in daily windows that split at Aircall's 10,000-result limit, read contacts in date windows, honour Aircall's rate limit, declare user_availability id and availability, and read numbers and teams once per sync |
| 0.4.27 | 2026-10-13 | 88524 | Update dependencies |
| 0.4.26 | 2026-10-06 | 87742 | Update dependencies |
| 0.4.25 | 2026-09-29 | 87057 | Update dependencies |
| 0.4.24 | 2026-09-23 | 85909 | Migrate the users stream to the Aircall User V2 API ahead of the V1 sunset and add pagination |
| 0.4.23 | 2026-09-22 | 86517 | Update dependencies |
| 0.4.22 | 2026-09-15 | 85956 | Update dependencies |
| 0.4.21 | 2026-09-08 | 85381 | Update dependencies |
| 0.4.20 | 2026-08-18 | 84505 | Update dependencies |
| 0.4.19 | 2026-08-11 | 83832 | Update dependencies |
| 0.4.18 | 2026-08-04 | 83374 | Update dependencies |
| 0.4.17 | 2026-07-28 | 82810 | Update dependencies |
| 0.4.16 | 2026-07-21 | 82307 | Update dependencies |
| 0.4.15 | 2026-07-14 | 81718 | Update dependencies |
| 0.4.14 | 2026-06-30 | 80992 | Update dependencies |
| 0.4.13 | 2026-06-23 | 80364 | Update dependencies |
| 0.4.12 | 2026-06-16 | 79750 | Update dependencies |
| 0.4.11 | 2026-06-09 | 79207 | Update dependencies |
| 0.4.10 | 2026-06-02 | 78574 | Update dependencies |
| 0.4.9 | 2026-04-28 | 77183 | Update dependencies |
| 0.4.8 | 2026-04-21 | 76490 | Update dependencies |
| 0.4.7 | 2026-03-17 | 74979 | Update dependencies |
| 0.4.6 | 2026-02-10 | 73001 | Update dependencies |
| 0.4.5 | 2026-01-27 | 72373 | Update dependencies |
| 0.4.4 | 2026-01-14 | 71503 | Update dependencies |
| 0.4.3 | 2025-12-02 | 70282 | Update dependencies |
| 0.4.2 | 2025-10-29 | 65055 | Update dependencies |
| 0.4.1 | 2025-09-12 | 66197 | Update to CDK v7 |
| 0.4.0 | 2024-08-23 | 44597 | Refactor connector to manifest-only format |
| 0.3.0 | 2024-08-19 | 44437 | Fix pagination |
| 0.2.12 | 2024-08-17 | 43879 | Update dependencies |
| 0.2.11 | 2024-08-10 | 43482 | Update dependencies |
| 0.2.10 | 2024-08-03 | 43101 | Update dependencies |
| 0.2.9 | 2024-07-27 | 42743 | Update dependencies |
| 0.2.8 | 2024-07-20 | 42357 | Update dependencies |
| 0.2.7 | 2024-07-13 | 41708 | Update dependencies |
| 0.2.6 | 2024-07-10 | 41448 | Update dependencies |
| 0.2.5 | 2024-07-09 | 41156 | Update dependencies |
| 0.2.4 | 2024-07-06 | 40801 | Update dependencies |
| 0.2.3 | 2024-06-25 | 40503 | Update dependencies |
| 0.2.2 | 2024-06-21 | 39920 | Update dependencies |
| 0.2.2 | 2024-06-20 | 39681 | Update dependencies |
| 0.2.1 | 2024-06-06 | 38454 | [autopull] base image + poetry + up_to_date |
| 0.2.0 | 2023-06-20 | Correcting availablity typo | Correcting availablity typo |
| 0.1.0 | 2023-04-19 | Init | Initial commit |