Integration

Meta Ads integration - what AdOps reads and writes

Updated 20 August 2026

AdOps connects to Meta Ads through the Graph API. It reads campaign and ad set entities with server-side filtering, then batches an Insights request covering only the fields a rule names. It writes campaign status, daily budget and campaign name, and can submit a deep copy of a campaign.

The Meta Graph API connection AdOps evaluates rules against: it reads campaign entities and batched Insights, and writes campaign status, budget and name.

Status: Live Ad platform

In numbers

The figures behind this connection

Graph API version
Read from the FACEBOOK_VERSION setting, with v18.0 as the in-code fallback Meta's paging cursors are re-pinned to the configured version before they are re-issued.
Entities per page
1,000, with automatic cursor paging until the account is exhausted
Entity fetch retries
3 attempts in total, waiting 1 second then 2 seconds
Insights cost per campaign
1 batched request covering every reporting period in the rule
HTTP timeout
30 seconds per Graph API call
Write level
Conditions evaluate at campaign or ad set level; every write action is campaign-shaped

The exchange

What AdOps reads, and what it writes.

Two lists, no summary in between. Anything absent from the write column is something AdOps cannot change in this system.

AdOps reads

Every field the engine requests, and nothing else.

  • Campaign or ad set entities from the ad account's edge, requesting only the name and created time fields
  • Server-side filtering on campaign ID, campaign name and campaign effective status, so Meta narrows the account before it answers
  • Up to 1,000 entities per page, following Meta's own paging cursor until the list is exhausted
  • Insights, batched into a single Graph request carrying one relative URL per reporting period the rule uses
  • Only the Insights fields a rule's conditions actually name, de-duplicated across those conditions
  • Single-object reads for daily budget, name, remaining budget and lifetime budget, issued only when a rule asks for them
  • The /me endpoint for token verification and /me/adaccounts for ad-account discovery

AdOps writes

Every change the engine is able to make.

  • Campaign status: ACTIVE to start, PAUSED to pause, DELETED to delete
  • Daily budget: increase, decrease or set, written as a whole number and clamped to the rule's maximum or minimum cap
  • Campaign name: append rendered text, remove a substring, or replace one substring with another
  • A deep copy of a campaign, submitted as an async batch job against the campaign's copies edge
The AdOps onboarding step for connecting Meta Ads, listing the three permissions granted: reading campaign and insight data, updating budgets, status and names, and never posting to a page or reading personal data. Sample data
The permissions are stated in the flow that asks for them — read insights, change budgets and names, nothing else. Read the details
A confirmation dialog over the AdOps ad account list reading Sync Ad Accounts, explaining that syncing will refresh all accounts from Facebook and update spend for active accounts. Sample data
A sync re-reads the account list from Meta and refreshes spend — and asks first, because it touches every account. Read the details
Connect Meta once and every ad account you grant comes across. Here, seven of nine are switched on. Silent. 6 sec No sound

AdOps connects to Meta Ads through the Marketing (Graph) API using an access token created when the ad account is connected. It reads campaign entities and batched Insights to evaluate a rule’s conditions, then writes four things back: campaign status, daily budget, campaign name, and a deep copy of a campaign.

What does AdOps read from Meta Ads?

Two kinds of data. First, entities. AdOps lists the ad account’s campaigns or ad sets, asking for only the name and created time fields, and pushes the rule’s pre-filters into the request so Meta narrows the account before answering. Campaign ID, campaign name and campaign effective status are all filterable server-side. Pages come back 1,000 entities at a time and AdOps follows Meta’s own paging cursor until there are no more.

Second, Insights. Rather than one call per condition, AdOps groups every condition by its reporting period, unions and de-duplicates the fields each period needs, then sends the whole set as one Graph batch request per campaign. A rule comparing today against the last 7 days and the last 30 days costs one round trip, not three. That batched request is issued with the unified attribution setting, so the numbers a rule evaluates use the attribution window configured on the ad set.

A handful of values are not Insights fields and are fetched separately, on demand only. Daily budget, remaining budget and lifetime budget are read from the campaign object, and AdOps issues that extra call only when a rule actually references one of them.

What does AdOps write back?

Four write paths, all at campaign level. Status changes post ACTIVE, PAUSED or DELETED. Budget actions increase, decrease or set the daily budget, computed as a flat amount, a percentage of the current budget, or a custom-metric result; the projected figure is floored to a whole number and clamped, so a rule that would cross its maximum cap writes exactly the cap instead. Name actions append rendered text, strip a substring or replace one substring with another. Duplication submits an async batch job against the campaign’s copies edge with deep copy enabled.

Before a budget write, AdOps re-reads the live daily budget from Meta; before a name write, it re-reads the live name. Neither is taken from the copy carried in the job, so an edit made in Ads Manager between the fetch and the write is not silently overwritten with a stale figure. Budget and name changes record the value before and the value after on the rule result.

How does AdOps keep the API cost down?

By asking for less. The Insights field list per period is derived from the rule’s own conditions rather than requesting the full Insights surface, and metrics that are not Insights fields at all, such as time-of-day conditions and custom metrics, are filtered out of the request entirely. Entity fetches request two fields. Object reads are conditional.

What happens when the Graph API fails?

Fetching an account’s entities is retried, 3 attempts in total with 1-second then 2-second waits, and an account that still fails is skipped so the rest of the sweep continues. Parsing a batched Insights response is retried up to 3 attempts before the failure is logged with its full request context. Every write goes through one instrumented wrapper that captures the function, the message, the request body and Meta’s own error response into a deduplicated error log, so a recurring API fault appears once with a count rather than as thousands of identical lines.

AdOps is an independent product and is not affiliated with Meta Platforms. Meta, Facebook and Ads Manager are trademarks of Meta Platforms, Inc.

Questions

Asked about this connection.

Direct answers, with the numbers attached.

Does AdOps need my Facebook password?

No. AdOps stores a Meta access token created when the ad account is connected and sends it as a bearer token on every Graph API call. Disconnecting from the Integrations screen removes the token and the ad accounts AdOps discovered with it.

Which Meta Graph API version does AdOps call?

The version is a deployment setting named FACEBOOK_VERSION, with v18.0 as the fallback compiled into the code. Because Meta's paging cursors are absolute URLs carrying their own version segment, AdOps strips that prefix and re-issues page two onward against the configured version, so a multi-page account stays on one version throughout.

How many Meta API calls does one rule run cost?

One entity listing per ad account per page of 1,000 campaigns, then one batched Insights request per campaign that covers every reporting period in the rule at once. AdOps adds one object read only when a condition uses daily budget, remaining budget or lifetime budget, and one extra Insights call for each metric-versus-metric condition.

Can AdOps change an individual ad?

No. A rule can evaluate its conditions at campaign or ad set level, but every action AdOps writes is campaign-shaped: status, daily budget, name and duplication are all sent to the campaign object.

What happens if Meta returns an error part-way through a run?

Fetching an ad account's entities is retried up to 3 attempts in total, waiting 1 second and then 2 seconds, and an account that still fails is skipped without stopping the other accounts in the sweep. Each campaign is evaluated inside its own error boundary, so one broken campaign does not abort the batch.

Is AdOps affiliated with Meta?

No. AdOps is an independent product and is not affiliated with, endorsed by or sponsored by Meta Platforms. Meta, Facebook and Ads Manager are trademarks of Meta Platforms, Inc.

Try this connection on your own account.

Every integration on this page is included on every plan. Connect it, leave your first rule in draft, and read the log after the first run.

Contact us See pricing

14 days free · no card · billed in Rupiah

Inside the product

What the screens actually look like

Nine screens from the working dashboard — the rule builder, the metric picker, the dayparting grid and the log that records what happened. Scroll the strip.

  • The AdOps Performance Dashboard showing a Purchase ROAS card at 2.380x and an Aggregated ROAS card at 2.088x, both badged Profitable, a Monthly Budget card at Rp 155jt, and a Spend Breakdown ranking the top five ad accounts against a budget utilisation bar at 45.5 per cent.
    Performance Dashboard. Two ROAS figures to three decimals, a budget meter, and spend ranked by ad account — over Today, Last 7 days, Last 30 days or This month.
  • The AdOps rule list showing twelve automation rules, each with an on/off toggle, the ad accounts it manages, and when it last triggered — some minutes ago, others on a dated timestamp.
    Rule List. Every rule, what it manages and when it last fired. The toggle is the only thing between draft and live.
  • The AdOps condition builder showing a task with time-of-day conditions across seven day tags, a nested AND group holding a lifetime spend condition under 400,000, and a second task with four stacked metric conditions.
    Conditions. Metric, period, operator, value — joined with AND or OR, and nestable, so a rule can say something a dropdown cannot.
  • The AdOps metric picker open over a condition row: a panel with Meta Ads and Custom metrics tabs, a search box, and a scrolling list of metrics with Spend selected.
    Metric picker. Forty-five Meta metrics and your own sheet columns in the same list, each carrying a reporting period and any of six operators.
  • The AdOps dayparting timetable: a grid of hours against the seven days of the week, with the daytime hours filled navy for every day and the night hours and weekend evenings left empty.
    Dayparting grid. Or draw the hours instead. Anything outside the shape you fill in simply does not run.
  • An AdOps execution log detail: one campaign, two action panels badged Not Executed, each listing the action parameters and every condition evaluated with its actual value, its expected value and a Pass or Fail badge.
    Rule Log detail. Why a rule did nothing is recorded as carefully as why it did something — actual against expected, condition by condition.
  • The AdOps activity log listing budget increases and campaign renames, each row naming the affected campaign by id, the rule that caused it and how long ago it happened.
    Activity Log. One row per change AdOps made in your account, naming the campaign and the rule responsible.
  • The AdOps ad account list: eighteen Meta ad accounts with on/off toggles, account ids, Active or Inactive badges and this month’s spend in rupiah.
    Ad Accounts. Accounts discovered from Meta arrive switched off. Nothing is read, and nothing is changed, until you turn one on.
  • The AdOps custom metric editor mapping a Google Spreadsheet: a spreadsheet id, a sheet name, a column to match campaigns on and a column holding the values.
    Custom metric. Point AdOps at a sheet, name the matching column and the value column, and your own number joins the metric list.

Every figure is rebuilt from the product’s own interface and filled with invented data — no customer name, ad account or spend figure appears anywhere on this site. See how a run works