[source-facebook-marketing] Ad-account quota errors (code 17/2446079) retried as transient, causing repeated full sync failures
Connector Name
source-facebook-marketing
Connector Version
6.1.1
What step the error happened?
During the sync
Relevant information
Connector Name
source-facebook-marketing
Connector Version
6.1.0 (observed), reproducible through 6.1.1 (current master)
What step the error happened?
During the sync
Relevant information
The ads and ad_creatives_from_ads streams hit Facebook's per-ad-account API rate limit and cannot recover from it — every sync attempt fails outright and Airbyte restarts the whole sync from scratch, repeatedly.
Root cause: MyFacebookAdsApi.call() in source_facebook_marketing/api.py only runs its rate-limit header handling (_handle_call_rate_limit) after a successful API call. The instant Facebook starts rejecting requests with a rate-limit error, that handling is skipped entirely — so the exact responses that carry the rate-limit signal (via x-ad-account-usage / x-business-use-case-usage headers) are the ones the connector never reads. On top of that, quota errors are retried through the same generic 5-try exponential backoff (~75 seconds total: 5s → 10s → 20s → 40s) used for any other transient failure, regardless of is_transient: false on the error and regardless of how long the actual block lasts (minutes to an hour).
Net effect: the connector spends its entire retry budget failing fast inside a block window it never even detects, then gives up and forces a full Airbyte-level sync restart — which just re-enters the same block.
Relevant log output
Observed on one Airbyte OSS connection (source-facebook-marketing:6.1.0, Graph API v25.0, 8 ad accounts) across ~7 hours and 20 consecutive sync attempts, all failed:
- 582 errors, 100% identical:
code: 17,error_subcode: 2446079,"Ad Account Has Too Many API Calls",is_transient: false. This is the per-ad-account limit — zero occurrences of app-level (code 4) or business-use-case (80000–80004) errors in the same window. - All 582 on
GET /v25.0/act_*/ads(limit=100, summary=true), from theads(298) andad_creatives_from_ads(216) streams. Theads_insightsstream never errored. "Facebook API Utilization is too high"— the warning the connector logs before proactively pausing — appears zero times in 124k log lines. The proactive throttle never fired once, across all 582 rejections.- The only pausing observed anywhere is the generic backoff ladder (213 backoffs, 32 give-ups), ~75s per call, against a block that in practice lasts minutes to an hour.
- Each sync attempt died roughly 16 minutes in, after ~7,000 records synced; Airbyte then restarted the whole sync ~17 minutes later. This cycle repeated 20 times.
(Aggregated from log analysis rather than a raw log excerpt — happy to attach the underlying log file if useful.)
Contribute
- Yes, I want to contribute
A fix is ready on branch FVCCarneiro/fix/facebook-marketing-ad-account-rate-limit — PR to follow, will link back to this issue.
Relevant log output
Contribute
- Yes, I want to contribute
Source: airbytehq/airbyte