Help Center Open AgencyOS

Ads performance

Compare a client’s Meta Ads, Google Ads and Google Analytics results month over month in one dashboard.

Ads Performance brings a client’s Meta Ads, Google Ads and Google Analytics results together for one month. Use it to compare periods, inspect campaigns and prepare a client-ready report without combining platform exports by hand.

Connect the client’s accounts

Open Social accounts, choose the client’s workspace and find Ads & analytics. The same section is on the workspace edit page. This is where you link data sources.

  1. For Meta ad accounts, click Connect Meta, sign in and approve access. Choose the client’s accounts in the list that opens. Use Link accounts to add more later.
  2. For Google Ads or Google Analytics 4, click Connect Google. One Google sign-in covers both. Use Link accounts for Google Ads and Choose property for Google Analytics 4. A workspace can have one Google Analytics 4 property.
  3. Open View ads report and choose the Report type: E-commerce for purchases, revenue and ROAS; Lead generation for leads, lead quality and CPL; or Brand awareness for reach, video and engagement.

Each ad account reports in its own currency and gets its own tab in the dashboard. AgencyOS never converts currencies, so you do not need to choose one.

If the client tracks a result in a way the defaults do not cover, change it in Conversion mapping.

Refresh data asks every linked account to update; new numbers normally appear within a few minutes. A manual refresh is limited to once every 10 minutes.

StatusMeaningWhat to do
ImportingPast data is arriving in the background.Nothing.
Up to dateThe account is updating normally.Nothing.
Update failedThe last update didn’t finish, for example because the platform limited requests.It retries with the next daily update. Retry updates every account in the workspace sooner, once every 10 minutes.
Access lostThe sign-in behind this account no longer works.Use Reconnect, Reconnect Meta or Reconnect Google and sign in as the same person. Its accounts start updating again without losing imported data.
  • Unlink an account: open the account’s menu (the three dots) and choose Unlink. It stops updating for this workspace and its data leaves this workspace’s ads report. Linking it again imports its history again.
  • Agency sign-ins are shared by every workspace in your agency. Use Add sign-in when a client’s accounts sit under a different Meta or Google login. With more than one, each account shows which sign-in it uses.
  • Remove a sign-in: open its menu and choose Remove sign-in. The dialog shows how many workspaces and accounts use it. Its accounts are unlinked in every one of those workspaces, and signing in again does not relink them. A sign-in used by several workspaces asks you to type a confirmation.

Conversion mapping

Conversion mapping decides which Meta action or Google Ads conversion category counts toward each metric. Most clients can keep the defaults. Change it when a client tracks a result another way, for example with a custom conversion instead of the standard purchase.

  1. On the Ads Performance page, pick the workspace and click Conversion settings.
  2. Under Meta action type, enter the one action that should count. Leave the field empty to keep the default shown.
  3. Under Google Ads conversion categories, select every category that should count. AgencyOS adds them together. Clear the list to stop counting that metric.
  4. Click Save mapping. To undo your changes, click Reset to defaults and then Save mapping.

For example, enter offsite_conversion.fb_pixel_purchase to count only purchases tracked by the website pixel, or offsite_conversion.custom.<id> for a custom conversion, using its ID from Meta.

MetricDefault Meta action typeDefault Google Ads categories
Purchasesomni_purchasePurchase
Add to cartomni_add_to_cartAdd to cart
Checkout startedomni_initiated_checkoutBegin checkout
Landing page viewslanding_page_viewPage view
Form submissionsleadSubmit lead form, Imported lead
MessagingSet automatically, and can’t be changedMessage lead
Call actionsclick_to_call_call_confirmPhone call lead
Booking requestsNot countedNot counted
Appointment requestsschedule_totalBook appointment
Qualified leadsOffline import onlyQualified lead
CustomersOffline import onlyConverted lead

What to know before you change it

  • When it applies: from the next daily update or Refresh data. An update normally rewrites the current and previous months, so older months keep the earlier mapping. To apply it to older months, unlink the account and link it again. Its history is imported again with the current mapping, and the report is incomplete until that finishes.
  • Where it applies: every linked account and report type in the workspace. Existing share links keep their snapshot until you create a new link.
  • Wrong names: AgencyOS does not check an action type against Meta. If Meta returns nothing under that name, the metric disappears for the updated months instead of showing 0, so copy the exact name.
  • Conversion value: on Meta it follows the action chosen for Purchases. On Google Ads it comes only from the Purchase category, even if you select other categories for Purchases.
  • Google Ads categories: a category can count toward one metric. If you select it under two metrics, only one of them counts it.
  • Messaging on Meta: always uses Meta’s messaging conversations started. Meta does not split this action by app, so WhatsApp, Messenger and Instagram chats can all land here.
  • Imported results: an imported value replaces the mapped value for that campaign and month.

Choose the report and period

  • Workspace picks the client. You only see workspaces you can access.
  • Report type changes the result cards, charts, campaign columns and wording. People with Manage reports or Create & edit workspaces save this choice for the workspace; for everyone else it changes only the current view.
  • Month chooses the reporting month. The current month is marked as month to date.
  • Compare to uses either the previous month or the same month last year.
  • Campaign status shows all, active or paused campaigns. Clear filters returns to the first available workspace, the current month, the previous-month comparison and all campaign statuses.

The page address keeps these choices, so you can bookmark a view or send it to a teammate who has access.

Read the dashboard tabs

  • Overview combines the linked ad accounts. Each ad account has its own tab, named after its platform, name and currency, such as Meta: Northwind (EGP); its numbers and money belong to that account only. Google Analytics shows website users and traffic channels. A tab is hidden when its source is not linked.
  • When accounts use different currencies, Overview adds up only what can be added, such as purchases and clicks. Money appears in the Accounts table, each account in its own currency. Click an account to open its tab.
  • Each result card shows the selected period, its change and the comparison value. Green means better and red means worse; for cost metrics, lower is better.
  • The charts show the six-month trend, daily results and the breakdowns that fit the report type. Click a source in Platform summary to open that platform’s first account.
  • The supporting-metrics card starts with a shorter list. Use its “Show all … metrics” control to expand it and Show fewer to collapse it.

How the data is shown

AgencyOS stores platform results for each campaign, once per calendar month and once per day. The page reads those stored results, so opening it does not contact Meta or Google. Months follow each ad account’s time zone.

Selected month and comparison month

If you choose October and compare with September, September’s numbers are never added to October’s.

What you seeSelected monthComparison month
Result cards and supporting metricsThe main numberThe change and the previous value
Campaign tableThe value in the cellThe change, and the value when you point to it
Six-month chartIts own bar. The six months end at the selected monthIts own bar
Daily chart on an account tabSolid lineDashed line, matched by day number
Action and platform chartsOne barA second bar beside it

The comparison month still affects two things:

  • Which campaigns count: a campaign is included if it spent in either month. One that spent only in September appears with — for October and adds nothing to October’s totals.
  • Which metrics appear: a metric shows if either month supplied it, so October can read — while September has a value.

The platforms can also place a result in a different month from its cost. Meta reports website purchases on the day they happen and on-Meta actions on the day of the impression. A click on 29 September followed by a website purchase on 2 October counts in October, while the click’s cost stays in September. Google Ads reports conversions on the click date.

Reading the change

The change is (selected month − comparison month) ÷ comparison month × 100. Rates compare the two finished rates.

ShownMeaning
▲ or ▼ with a percentageBoth months have a value. Green is better and red is worse, so a cost metric turns red when it goes up. Amount spent and Frequency stay grey.
NewThe comparison month is exactly 0 and the selected month is not.
—Either month has no value, or both are 0. A campaign that did not exist in the comparison month shows —.

The current month is compared with a whole month and nothing is adjusted for days. On 3 November, 3 days of November sit against all of October, so most results show a large drop. The page marks this month as month to date.

A campaign that runs across two months

A campaign from 20 October to 10 November is split at the month boundary. October holds 20 to 31 October and November holds 1 to 10 November.

  • Days are not adjusted: November compared with October sets 10 days against 12. Start and end dates are not used in any calculation.
  • Each rate uses one month: the page has no lifetime figure. For a campaign’s whole-life ROAS, add its conversion value and its spend across both months, then divide.
  • Don’t add reach across months: someone who saw the ad in both months counts once in each. Spend, impressions and action counts can be added.
  • Results can arrive after it ends: website purchases inside the attribution window land with no new spend, so ROAS can rise after the campaign stops.
  • The months around it: October compared with September shows — for the change. December compared with November still lists the campaign, with — for December. After that it is no longer listed.
  • Status, budget and dates: these are the campaign’s current settings, not its settings in the month you are viewing.

When numbers change

  • Accounts update daily and when someone uses Refresh data. An update normally rewrites the current and previous months, so a finished month can still change during the next month.
  • Meta says its results can change for up to 28 days after they are reported. Treat the last few days as provisional.
  • A share link keeps the numbers from when it was created. The live page can move away from it.

Other display rules

  • Result cards by tab: on Overview the last E-commerce and Lead generation card is Website active users when Google Analytics is linked. On an account tab it becomes Impressions for E-commerce and CTR for Lead generation. Brand awareness uses the same cards on both. Google Analytics shows active, new and returning users and the new-user rate.
  • Campaign status: changes only the campaign table and its totals. Cards and charts still count all campaigns.
  • Six-month chart: counts every campaign on the platform, including those with no spend in the selected or comparison month, so its bar can differ slightly from the card.
  • Daily chart: uses the daily results, which imports do not change. Daily leads can differ from the card, and an imported metric has no daily line.
  • Audience and content lists: use the top 50 ad sets and top 50 ads by spend for each account and month. Items with the same name are added together.
  • No value: if a platform returns no result for an action, AgencyOS stores nothing, so a month with no purchases can show — or hide the card. ROAS shows — when conversion value is 0. See Why a metric may be missing.
  • Rounding: Amount spent and Conversion value show whole currency units. Most cost metrics show 2 decimals, and Cost per video view (3 sec+) and Cost per ThruPlay show 3. Rates show 1 or 2 decimals, and ROAS shows 2 decimals with an x.

How results are calculated

AgencyOS adds base results across campaigns, then calculates each rate from those totals. Campaign rates are never averaged. Rates such as CTR, CPM and ROAS are worked out by AgencyOS and are not copied from the platforms.

The report type changes the layout only. It does not filter campaigns or change what AgencyOS asks the platforms for, so every campaign that spent counts in every report type.

Results that come from the platforms

MetricMeta AdsGoogle Ads
Amount spentspendCost
ImpressionsimpressionsImpressions
Reachreach for each campaign and monthUnique users, for some campaign types
ClicksLink clicks (inline_link_clicks). A campaign row without them uses all clicks (clicks)All clicks
Landing page views, Add to cart, Initiated checkout, Purchases, Appointment requestsThe action set in Conversion mappingThe categories set in Conversion mapping
Conversion valueThe value of the action used for PurchasesThe value of the Purchase category
Form submissionsThe mapped action. The default, lead, includes website leads and on-Facebook leadsThe mapped categories
Messaging conversationsonsite_conversion.messaging_conversation_started_7d, not split by appThe mapped categories
Call actionsThe mapped action. The default is Meta’s estimated call confirmation clicks, not connected callsPhone calls plus the mapped categories
Video startsvideo_play_actions: each time a video starts. The closest figure to all viewsNot supplied
Video views (3 sec+)video_view: plays that reached 3 seconds, or 97% of a shorter video. Replay time does not countTrueView views: 30 seconds or an interaction
25%, 50%, 75% and 100% video viewsvideo_p25_watched_actions to video_p100_watched_actions, including plays that skipped to that pointQuartile rate × Impressions, rounded
ThruPlaysPlays to the end or for at least 15 seconds, when Meta returns themNot supplied
Reactionspost_reaction: all reaction typesYouTube likes on Video and Demand Gen campaigns
CommentscommentYouTube comments on Video and Demand Gen campaigns
SharespostYouTube shares on Video and Demand Gen campaigns
Savesonsite_conversion.post_saveNot supplied
Profile visitsinstagram_profile_visits, when Meta returns itNot supplied
New Page likeslike: Facebook Page likes credited to ads. Instagram follows are not includedNot supplied
New and returning customers and their revenueNot suppliedPurchase conversions split by customer type
Qualified leads, Customers wonOffline importThe mapped categories or offline import
Booking requests, Messenger conversations, Leads responded toOffline import. Booking requests can also be mappedOffline import. Booking requests can also be mapped

Website active users, new users and traffic channels come from the linked Google Analytics property. They cover the whole website, not only people who came from these ads.

Results AgencyOS calculates

MetricCalculation
CTRClicks ÷ Impressions × 100
CPCAmount spent ÷ Clicks
CPMAmount spent ÷ Impressions × 1,000
FrequencyImpressions ÷ Reach
ROASConversion value ÷ Amount spent
Cost per purchaseAmount spent ÷ Purchases
Average order valueConversion value ÷ Purchases
Purchase conversion ratePurchases ÷ Clicks × 100
Cost per add to cartAmount spent ÷ Add to cart
Cost per checkoutAmount spent ÷ Initiated checkout
Cart abandonment rate(1 − Purchases ÷ Add to cart) × 100
Total leadsForm submissions + Messaging conversations + Call actions + Messenger conversations + Booking requests + Appointment requests, using whichever exist
Unqualified leadsTotal leads − Qualified leads
Cost per lead (CPL)Amount spent ÷ Total leads
Cost per qualified leadAmount spent ÷ Qualified leads
Lead conversion rateTotal leads ÷ Clicks × 100
Lead-to-customer rateCustomers won ÷ Total leads × 100
Customer conversion rateCustomers won ÷ Clicks × 100
Cost per customerAmount spent ÷ Customers won
Lead response rateLeads responded to ÷ Total leads × 100
Cost per video view (3 sec+)Amount spent ÷ Video views (3 sec+)
Video completion rate100% video views ÷ Video starts × 100
Cost per ThruPlayAmount spent ÷ ThruPlays
Post interactionsReactions + Comments + Shares + Saves, using whichever exist
EngagementsPost interactions + Clicks
Engagement rateEngagements ÷ Reach × 100
Audience growthNew Page likes ÷ follower count before the month × 100
Returning usersWebsite active users − New website users
New-user rateNew website users ÷ Website active users × 100

What to watch for

  • Total reach is a sum: one campaign’s reach is the platform’s own number, but a total adds campaigns together. A person who saw two campaigns counts twice, so total reach can be higher than Ads Manager’s and total Frequency and Engagement rate can be lower.
  • Costs use all spend: Cost per purchase, CPL, ROAS and Cost per video view (3 sec+) all use total spend, including campaigns that were not aiming for that result. For example, image campaigns raise Cost per video view (3 sec+).
  • Video views are not all plays: Video views (3 sec+) counts only plays that reached the threshold. Use Video starts for every time a video started. On Overview, Meta and Google Ads views are added even though their thresholds differ.
  • Two video rates use different bases: Video completion rate divides by Video starts. The client report’s watch chart divides by Video views (3 sec+), so its 100% point is a different number.
  • Total leads counts actions, not people: one person who submits a form and sends a message counts twice.
  • Engagements is AgencyOS’s own formula: it is not Meta’s Post engagement, so expect a different number in Ads Manager.
  • Cart abandonment rate is an estimate: it compares two attributed counts rather than tracking real carts, and it goes negative when purchases exceed adds to cart.
  • Audience growth has a broad base: the follower count adds the latest figure before the month from all the workspace’s social accounts, while New Page likes is Facebook only. The comparison month uses the same base.

Find and inspect campaigns

  • Use Search campaigns to search by campaign name. The Objective chips narrow the table to objectives found in the current results.
  • Each row shows the platform and status. Click a column heading to sort; click it again to reverse the order. The change from the comparison period appears under each value, and the previous value appears when you point to it.
  • Click a row or View details to open the details panel. It shows the objective, language, budget, dates, report type, a six-month chart and a metric-by-metric comparison. Where available, you can also open the campaign in its ad platform or open the workspace brief.
  • Turn on Highlight this campaign in the client report to mark an important campaign. Highlighted rows show a “★ report” badge and can be included in the report’s campaign section. Changing highlights needs Manage reports.
  • Open Export and choose Campaigns (CSV) to download all available campaign columns for the selected and comparison periods. Client report (PDF) opens the report builder and then the browser print dialog.

Build the client report

Click Generate client report to open Client report · customize and preview. The preview uses the same workspace, month and comparison as the dashboard. People with View can preview and download it; Manage reports is needed to change it.

The customize panel includes every part of the report setup:

  • Report type: choose E-commerce, Lead generation or Brand awareness.
  • Template: choose what to Start from, or enter a name under Save current setup as and click Save.
  • Period: change Month and Compare to. These choices also change the dashboard behind the builder.
  • Data sources: with more than one ad account, choose the Ad account the report covers. A report opened from an account tab starts on that account. All accounts is offered only when they share a currency, and then you can include Google Ads, Meta Ads or both; at least one must remain selected.
  • Cover and branding: change Report title, Prepared by, Accent color and Cover color, including custom colours.
  • Sections: show, hide and move the month-at-a-glance, key results, six-month trend, result sources, report-type focus, website, top campaigns, notes and glossary sections.
  • Key result cards: turn primary and supporting metrics on or off. At least one card must remain. A metric unavailable from the connected sources is disabled.
  • Top campaigns: show the top 3, 5 or 10 and choose the metric used to rank them.
  • Notes and next steps: write the client-facing explanation and planned actions.
  • Contact: set the Account manager and Email shown in the report.

You can also click a heading, highlight sentence or the client name directly in the preview and edit it in place. Clear text edits removes those direct edits. Reset to template restores the selected template’s sections, result cards, campaign count and ranking while keeping the report’s title, colours, sources, notes and contact details.

Changes autosave shortly after you stop editing. AgencyOS keeps a separate saved report for each workspace and month, so changing one month does not overwrite another client or month. Hide customize panel gives the preview more room; use Show customize panel to bring the controls back.

Use and manage templates

Built-in choices are Standard monthly, Executive summary and Detailed performance. Applying one changes its section visibility, key result cards and number of top campaigns while keeping the report’s own branding and client details.

To make an agency template, finish the setup, enter a name under Save current setup as and click Save. Saved templates appear under Saved templates in Start from and are available across the agency. Applying one uses its full setup and may also switch the report type, but keeps the current report’s account manager and email.

Use Manage templates to rename or delete saved templates. Deleting a template removes it for everyone in the agency; reports already created from it keep their current setup.

Download or share the report

  • Click Download PDF. AgencyOS opens the browser print dialog; choose Save as PDF. If the cover or chart colours are missing, enable Background graphics in the print options and try again.
  • Click Copy share link to save the report and copy a public link. The client sees a read-only snapshot of the report exactly as it was when the link was created, with its charts and a Download PDF button. They do not need to sign in.
  • A share link expires after 90 days. The builder shows when the active link was created, when it expires and how many times it has been viewed.
  • Creating another link replaces the active one: the old link stops working and the new snapshot contains the latest saved report. Click Revoke to stop the current link immediately.

Import results tracked outside the ad platforms

Use Import in the campaigns card, then Download template CSV in the Import results dialog. You can upload a CSV or JSON file up to 2 MB and 5,000 rows.

The columns are:

ColumnWhat to enter
campaignThe platform campaign ID or exact campaign name.
platformmeta or google_ads. It can be blank when the campaign name is unique in the workspace.
monthThe result month in YYYY-MM format.
qualified, customers, respondedQualified leads, customers won and leads responded to.
form, wa, calls, msgr, book, apptForm, messaging, call, Messenger, booking and appointment results.

Result values must be non-negative whole numbers. Each accepted row replaces the earlier imported row for the same campaign and month; it does not replace the campaign itself or its spend and delivery data. If a later row omits an offline result that was present before, that old imported value is no longer kept. After the import, AgencyOS reports how many rows were imported and lists rejected rows with a reason.

Messaging conversations from Meta already include Messenger chats. If you import msgr, also import wa for the same campaign and month, or Total leads counts those chats twice.

Why a metric may be missing

AgencyOS hides a metric when the linked sources did not supply it. Hidden means “not available”, not zero.

  • Form starts appear only when Google Analytics can match the form_start event to a Google Ads campaign.
  • Page visits stay hidden because there is no matching ad action. Instagram follows are not supplied as an ad result either; Meta may separately report Facebook Page likes, shown as New Page likes.
  • Lead response rate has no platform result. Import responded results to calculate it.
  • Qualified leads and Customers won come from an offline import, or from Google Ads when matching qualified-lead or converted-lead conversion categories are available and mapped.
  • Google reach is available only for Display, Video, Demand Gen and App campaigns. Search, Shopping and Performance Max campaigns do not add reach.
  • Google video quartiles are derived from the quartile rate and impressions, then rounded to a count.

Who can do what

PrivilegeWhat it allows
ViewOpen Ads Performance, use filters and tabs, inspect campaign details, export campaign CSV files, and preview or download client reports.
Manage reportsCustomize and autosave reports, change highlights, save and manage templates, create or revoke share links, import offline results, refresh data, and change the report type or conversion mapping.
Create & edit workspacesConnect, choose, reconnect and unlink Meta or Google accounts, and add or remove sign-ins. It also allows the workspace’s report type to be changed.