Srikar Chamarthy
06/03/2026, 1:26 PMkapa.ai
06/03/2026, 1:26 PMengagements_emails and companies make additional batch POST requests to the Associations v4 API for every page of results. For example, the companies stream fetches associations for multiple entity types, meaning each page of results costs multiple HTTP requests. This silently multiplies API usage and slows things down. [Hidden API Calls]
3. Destination buffering — The Starting a new buffer for stream ... messages in the destination logs are normal. The destination is buffering records before writing them, which can take a long time with large datasets before any output is visible. This is expected behavior.
What you can do • Wait it out — The connector is actively retrying with backoff. On busy HubSpot workspaces with large datasets, syncs can take a very long time due to rate limiting.
• Reduce the number of streams — If you don't need all streams (e.g., engagements, engagements_emails, email_events), disabling unused ones will reduce API calls and speed up the sync.
• Check your HubSpot API usage — If your workspace is very active, you may be competing with other API consumers for the rate limit budget.
• Monitor for actual errors — Your logs show streams completing successfully (e.g., campaigns read 14 records and finished). As long as streams are eventually completing, the sync is progressing normally.
In short, the slow progress is most likely a combination of rate limiting and the volume of hidden association API calls — both are known behaviors of the HubSpot connector. [Contributing Guide] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 1:28 PMkapa.ai
06/03/2026, 1:28 PMengagements_emails and companies make additional batch requests per page of results. If HubSpot returns more records on a given day (e.g., new data was added), the number of association API calls increases proportionally, which can push you into rate limiting territory. [Hidden API Calls]
3. email_events is a known heavy stream — This stream can pull a very large volume of records and is specifically called out as a performance concern due to HubSpot API limitations. [Forum Post]
Suggestions • Set a more recent start_date — If your start_date is far in the past, the connector may be re-scanning a large historical window on some syncs. A more recent start date limits the scope.
• Disable streams you don't need — Particularly email_events, engagements, and engagements_emails if not required, as these are among the heaviest streams.
• Check if the sync is truly stuck vs. just slow — Look for continued Retrying. Sleeping for X seconds messages in the logs. If those are still appearing, the connector is alive but rate-limited. If there are no log messages at all for a long period, it may be a genuine hang.
I'd recommend opening a GitHub issue with your connector version and full logs if the indefinite stalls continue, as this intermittent behavior may warrant deeper investigation by the Airbyte team. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 1:29 PMkapa.ai
06/03/2026, 1:31 PMstart_date before investing in more resources. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 1:33 PMkapa.ai
06/03/2026, 1:33 PM2026-06-02 11:08:40 - Starting a new buffer for stream deals
...
2026-06-03 09:25:03 - Periodic buffer flush started
That's a gap of over 22 hours with no activity — the destination was just holding data in memory buffers (41 MB across 6 streams) waiting for more data from the source.
What this means The destination was not stuck — it was waiting for the source to finish reading. The source (contacts, deals, etc.) was taking extremely long to pull data from HubSpot, most likely due to:
1. Rate limiting — As seen earlier in your logs with the 429 errors and backoff retries
2. Hidden association API calls — The contacts and deals streams make additional batch API calls per page of results, multiplying the number of requests significantly [Contributing Guide]
The good news The sync did eventually complete — the buffer flushed successfully and uploaded to S3/parquet at 09:25:03 on June 3rd. So it wasn't truly stuck, just very slow.
What you should do • Disable contacts and deals association fetching if you don't need association data — these are the heaviest streams due to the hidden API calls
• Check how many records are in your HubSpot contacts and deals — if you have millions, long syncs are expected
• Consider splitting contacts/deals into a separate connection from lighter streams, so heavy streams don't block everything else
The knowledge sources do not contain enough information to tell you exactly why it completes in 30 minutes on some days — but on the day shown in your logs, the sheer volume of API calls for contacts and deals appears to be the bottleneck. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 1:35 PMkapa.ai
06/03/2026, 1:35 PM11:08:40 on June 2nd and when you checked at 09:25 on June 3rd, with no actual progress happening during that time. This aligns with the intermittent "infinitely stuck" behavior you described earlier.
Unfortunately The knowledge sources do not contain enough information to tell me definitively why the sync hangs indefinitely in some runs but completes in 30 minutes in others. This appears to be an intermittent issue that may require deeper investigation.
What I'd recommend 1. Open a GitHub issue on the Airbyte repository with:
◦ Your connector versions (source-hubspot and destination version)
◦ Full logs from both a successful 30-min run and a stuck run
◦ Number of records in your contacts and deals streams
1. As a workaround, set a sync timeout so that stuck syncs are automatically cancelled and retried rather than hanging indefinitely
2. Try disabling heavy streams like contacts, deals, engagements one at a time to identify which stream is causing the hang 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 1:36 PMkapa.ai
06/03/2026, 1:36 PMSrikar Chamarthy
06/03/2026, 1:45 PMkapa.ai
06/03/2026, 1:45 PM09:37:51 - Records read: 5000 (238 MB)
09:38:08 - Records read: 5000 (270 MB)
09:38:18 - Records read: 5000 (297 MB)
09:38:38 - Records read: 5000 (317 MB)
09:38:51 - Records read: 5000 (330 MB)
09:39:00 - Records read: 5000 (359 MB)
The real problem — email_events This stream is reading 5,000 records every 10-20 seconds and already at 359 MB in under 2 minutes. This is a known heavy stream. [Forum Post]
• It has a very large volume of records
• Each batch of 5,000 records is ~30-40 MB, meaning your total dataset is likely gigabytes
• The destination buffer is already at 60 MB across 7 streams and growing fast
This is why your sync sometimes takes 30 min and sometimes "hangs" • On days with less email_events data to process → completes in 30 min
• On days with more data or rate limiting → runs for hours and appears stuck
Strong recommendation Disable email_events if you don't absolutely need it. It is specifically called out as a performance concern due to HubSpot API limitations and high data volume. [Forum Post]
If you do need it, consider setting a more recent start_date to limit how far back it reads. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 2:45 PMkapa.ai
06/03/2026, 2:45 PMcontacts — not deal_pipelines.
What the numbers tell us deal_pipelines only extracted 1 record — it's actually done. Everything after it is queued waiting for contacts and companies to finish.
Why contacts is slow contacts is one of the heaviest streams because:
• It makes additional hidden batch API calls to the Associations v4 API for every page of results [Contributing Guide]
• With 7,999 records still counting at 44 minutes, it's likely hitting HubSpot rate limiting (429) between pages
What to do 1. Wait — contacts and companies are still actively syncing, everything else will unqueue once they finish
2. Long term — If contacts consistently takes this long, consider whether you need all association data, as each page triggers multiple extra API calls [Contributing Guide] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsSrikar Chamarthy
06/03/2026, 2:48 PMkapa.ai
06/03/2026, 2:48 PMcampaigns ✅ already done
• contact_lists ✅ already done
• deal_pipelines ✅ already done
• owners — very small, fast
• email_subscriptions — only 2 records seen earlier
Let finish, then trigger separately • companies — still running, 10,072 records, let it complete first
• contacts — still running, 7,999 records, let it complete first
Trigger separately after current sync completes These are the heaviest streams — run them in a separate sync or one at a time:
1. email_events — extremely high volume, can run for hours [Forum Post]
2. engagements — heavy stream with many association API calls [Contributing Guide]
3. engagements_emails — same issue, hidden association calls per page [Contributing Guide]
4. deals — moderate volume but also has association calls for companies, contacts, and line items [Contributing Guide]
5. marketing_emails — makes one extra API call per individual record for statistics [Contributing Guide]
Practical approach Consider creating two separate Airbyte connections to the same HubSpot source:
• Connection 1 — light streams (campaigns, contact_lists, owners, etc.)
• Connection 2 — heavy streams (email_events, engagements, deals, marketing_emails) on a less frequent schedule 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 4:26 PMkapa.ai
06/03/2026, 4:26 PMcontacts is your problem stream. This is actually a well-documented issue in the knowledge sources.
Why contacts specifically struggles 1. Hidden association API calls — For every page of contacts, the connector makes additional batch POST requests to HubSpot's Associations v4 API. So each page of 100 contacts actually costs multiple HTTP requests [Contributing Guide]
2. Known mid-sync auth failures — There is a documented bug where OAuth tokens expire mid-sync specifically during the associations read for the contacts stream, causing it to hang or fail. This was fixed in version 5.8.11 [GitHub Issue]
3. Incremental sync issues — There was also a documented bug where contacts would pull all records instead of only updated ones since the last bookmark, fixed in version 6.1.1 [GitHub Issue]
What to check immediately • What version of source-hubspot are you on? If you're below 6.1.1, upgrading should help significantly
• If you're already on a recent version, the associations read is likely causing rate limiting
Quick workaround right now Run contacts in its own dedicated separate connection away from all other streams, so when it hangs it doesn't block everything else. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 4:27 PMkapa.ai
06/03/2026, 4:27 PM6.0.15 is below 6.1.1 where the key fixes were applied. This is very likely the root cause of your contacts stream issues.
Fixes you are missing on 6.0.15 What's likely happening to you On 6.0.15, the contacts stream is probably:
• Pulling all records every sync instead of only updated ones since the last bookmark
• Potentially failing mid-sync due to OAuth token expiration during association reads
What to do Upgrade to 6.1.1 or later immediately — this single step is very likely to fix your contacts stream hanging issue. The upgrade should result in:
• Faster incremental syncs
• No more mid-sync auth failures on associations 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsSrikar Chamarthy
06/03/2026, 4:29 PMkapa.ai
06/03/2026, 4:29 PMSrikar Chamarthy
06/03/2026, 4:29 PMkapa.ai
06/03/2026, 4:29 PMSrikar Chamarthy
06/03/2026, 4:29 PMkapa.ai
06/03/2026, 4:29 PMcontacts completes successfully when run separately (in its own connection), it tells us:
The issue is not contacts itself The problem is resource/API contention when contacts runs alongside other streams:
• When running with other streams, contacts competes for HubSpot's rate limit budget — the 429 errors you saw earlier are shared across all streams running concurrently [Contributing Guide]
• contacts makes hidden association API calls on top of the primary read, multiplying its API usage significantly [Contributing Guide]
• When other streams consume the rate limit, contacts backs off repeatedly and eventually appears stuck
Recommended setup going forward Split into two separate Airbyte connections:
Connection 1 — Run alone
• contacts
Connection 2 — Run together
• campaigns, contact_lists, deal_pipelines, owners, companies, deals, email_subscriptions, marketing_emails
Connection 3 — Run separately (heaviest)
• email_events, engagements, engagements_emails
And schedule them to run at different times so they don't overlap and compete for HubSpot's API rate limit.
Also, upgrading to 6.1.1 is still strongly recommended as it fixes incremental sync issues that may be causing contacts to pull more records than necessary each run. [GitHub Issue] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Srikar Chamarthy
06/03/2026, 4:30 PMkapa.ai
06/03/2026, 4:30 PM6.1.1 won't help you directly — Full Refresh always pulls all records regardless.
What this means for your situation With Full Refresh:
• Every sync pulls all records from scratch — so contacts will always read all 7,999+ records every time
• The version upgrade fixes won't reduce the amount of data being pulled
• The rate limiting problem remains — more records = more API calls = more 429 backoffs
Why it worked when run separately This confirms the issue is purely HubSpot API rate limit contention:
• When contacts runs alone, it gets the full rate limit budget to itself
• When running with other streams, it has to share the budget and backs off repeatedly, appearing stuck
Recommendations 1. Keep the separate connection approach — this is the most practical fix for your situation right now, since Full Refresh will always be heavy for contacts
2. Consider switching contacts to Incremental sync if possible — this would dramatically reduce the number of records pulled on each sync after the first one [GitHub Issue]
3. Schedule syncs at off-peak hours — when HubSpot API usage is lower, you're less likely to hit rate limits
The knowledge sources do not contain enough information to tell me exactly what rate limit budget HubSpot allocates, but splitting connections remains your best practical solution. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.