#86316·airbyte

[source-facebook-marketing] Ad-account quota errors (code 17/2446079) retried as transient, causing repeated full sync failures

Author: FVCCarneiroCreated Sep 15, 2026Updated Sep 15, 2026
Labelstype/bugarea/connectorscommunityneeds-triageconnectors/source/facebook-marketingautoteamteam/use

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 the ads (298) and ad_creatives_from_ads (216) streams. The ads_insights stream 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

bash

Contribute

  • Yes, I want to contribute