feat(source-applovin-ads): Add AppLovin Ads source connector - #83270
feat(source-applovin-ads): Add AppLovin Ads source connector#83270devin-ai-integration[bot] wants to merge 2 commits into
Conversation
…rtiser reporting Co-Authored-By: Gary Yang <gary.yang@airbyte.com>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
👋 Greetings, Airbyte Team Member!Here are some helpful tips and reminders for your convenience. 💡 Show Tips and TricksPR Slash CommandsAirbyte Maintainers (that's you!) can execute the following slash commands on your PR:
📚 Show Repo GuidanceHelpful Resources
|
|
Note Autopilot progressive rollouts are not enabled for the following modified connector(s):
This is a courtesy heads-up only — it does not block merge or fail any check. |
|
|
Deploy preview for airbyte-docs ready!
Deployed with vercel-action |
|
10x. I'll gladly close mine and go for yours. I've already tested my connector and it's working. Which airbyte human can follow up on this work and move into a mergable state? |
Co-Authored-By: Gary Yang <gary.yang@airbyte.com>
What
Adds
source-applovin-ads, a manifest-only source for AppLovin's advertiser-side reporting APIs.AppLovin has no connector in the catalog today. There is an open community PR — #81418 by Idan Sheinberg (@sheinbergon) — which this PR builds on and would supersede; its manifest is the starting point for the requester, pagination, and per-day slicing design, and the credit belongs there. It has been idle since 2026-07-20 and its CI cannot complete because fork PRs get no secrets. A maintainer should decide between the two rather than merging this by default, and ideally loop in the original author.
Three differences from #81418, all of which come from the published AppLovin docs:
web_report_daily(/webReport)./reportand/webReportare different endpoints with different column sets: only/webReportexposes checkout/new-customer metrics (nc_d0_checkouts,chka_usd_7d,new_visitor_rate), and only/reportexposes install metrics (conversions,conversion_rate,ret_*). A D2C advertiser running web campaigns cannot get its spend or ROAS out of/reportat all. feat: 🎉 AppLovin Ads Reporting API Source Connector #81418 requests the web-only columns from/report, where they are not valid columns./reportand/assetAnalyticsReportand 90 days for/webReport, and out-of-window dates return an error rather than empty results. Without a clamp, anystart_dateolder than the window fails the sync outright.Resolves an open question about the asset endpoint while we're here:
/assetReportand/assetAnalyticsReportare both real. They are the same report with different time parameters —/assetReporttakesrange(yesterday,last_7d,last_month),/assetAnalyticsReporttakesstart/end. The date-based variant is the one usable with a cursor, so that is what this connector calls.How
Streams, all incremental, all requesting one day per HTTP call so each record belongs to exactly one date:
advertiser_report_daily/report(report_type=advertiser)day(native)web_report_daily/webReport(report_type=advertiser)day(native)asset_report_daily/assetAnalyticsReportdate(injected)ApiKeyAuthenticatorinjecting the Report Key as theapi_keyquery parameter, which is what all three endpoints expect.min_datetimeon the cursor'sMinMaxDatetime, e.g.{{ day_delta(-89, format='%Y-%m-%d') }}for/webReport.AddFieldstransformation stampsstream_slice.start_timeasdateto cursor on.lookback_windowdefaults to3rather than0so restated attribution data is picked up without the user having to discover the problem first.config_errornaming the Report Key, since AppLovin returns 403 for a bad key and retrying it five times is pointless. AppLovin also uses 403 for every path, valid or not, so a wrong-key error is the most likely first failure a user hits.attribution_mode(click/click_and_view) is exposed for/webReport, which is the one endpoint that accepts it. It changes reported conversion counts, so it belongs in config rather than being silently defaulted.checkusesasset_report_dailybecause the asset report is identical for app and web advertisers, so it succeeds for either kind of account. Checking/reportwould fail for a web-only advertiser and vice versa.Review guide
airbyte-integrations/connectors/source-applovin-ads/manifest.yaml— streams, cursors, window clamps, primary keysairbyte-integrations/connectors/source-applovin-ads/metadata.yamldocs/integrations/sources/applovin-ads.md— including which stream to use for which campaign typeUser Impact
New connector, so no impact on existing connections. Users can sync AppLovin app campaign, web campaign, and creative-level reporting into any destination.
Scope boundary, stated in the docs: this is advertiser-side reporting only. MAX publisher/monetization reporting (
/maxReport,/maxCohort) is not included, and neither are the management or Conversions APIs — those use different hosts and different credentials (Management Key, Campaign Management Key, CAPI Key), and the CAPI is a write path that does not belong in a source.Testing status
Not yet validated against the live API — this needs a real AppLovin Report Key.
Done:
validate_manifestpasses with no errors or warnings; the manifest fully resolves.Not done, and required before this leaves draft:
check,discover, and a realreadagainst a live account.resultsis the response envelope for/webReportspecifically (it is for/report, per feat: 🎉 AppLovin Ads Reporting API Source Connector #81418's live testing).Any reviewer with an AppLovin account can unblock this; adding the Report Key to GSM would also let CI actually exercise the connector, which is the thing that has stalled #81418.
Can this PR be safely reverted and rolled back?
Link to Devin session: https://app.devin.ai/sessions/a06b28c3b7ca496ea9a0af3e4d3c9eb1