Meta Ads: insights, ad sets and campaigns
The ad set objective defines the result
Cost per result by campaign and client
Dashboard, AI agent and alerts
What it solves
- The CPL and cost per result in the report match Ads Manager.
- Each campaign is evaluated by the objective it was created for, not by a single lead yardstick.
- "Campaign with no results" alerts stop firing for no reason on reach, conversation or sales campaigns.
Business questions it answers
Ask your agent these questions once the case is live.
What you need
- Meta Ads connected to Nekt (one account per client, if multi-client)
- The objective agreed with each client: lead, conversation, purchase or reach
What you get
- A table by ad and day with result, result type and cost
- A client dashboard with a cost per result that matches Ads Manager
- An AI agent that answers media questions with the right rule
- Alerts only for campaigns that have a conversion to measure
Where to activate
Cost per result by campaign, with the result type next to the number.
Answers the client with the objective rule already applied.
No results for N days, only for objectives that have a conversion.
One source and well-defined rules. A good first case. The detailed view has the business rules, the pitfalls and the acceptance test. Or send everything straight to your agent with the Nekt MCP.
For each ad and day, Meta returns a list of actions with dozens of types, and the same lead shows up in several of them. Anyone who adds up the types that look like leads reports a CPL at half the real value. Anyone who expects leads from a reach campaign or a WhatsApp conversation campaign fires false alerts about campaigns with no results.
How it is usually done, and the rule
Each row is a mistake that already happened in practice.
Read the ad set's optimization_goal and, for website conversions, the optimized event (promoted_object.custom_event_type). Never classify by campaign name or by the presence of some action.
Each objective has a single action_type that counts as the result. Reach objectives have no conversion to measure.
lead_grouped + fb_pixel_leadlead is already the sum of onsite_conversion.lead_grouped (instant form) and offsite_conversion.fb_pixel_lead (website pixel). Use those two to break down by origin, never add all three.
offsite_search_add_meta_leads, offsite_content_view_add_meta_leads, offsite_complete_registration_add_meta_leads and onsite_web_lead repeat leads already counted.
The insight's native clicks column includes clicks outside the link and does not match Ads Manager.
A reach campaign has no CPL; a conversation campaign has a cost per conversation. Say reach objective, no conversion to measure, never zero leads.
It is the top of the WhatsApp funnel. Qualification comes from the CRM or the customer service tool.
If the Lead event fires based on time on page (for example, 20 seconds), the valid result is the form's custom conversion. This is a per-client rule.
If the agency passes on tax on the Meta budget (for example, 12.15% or 13.83%), state whether the cost includes tax or not and keep the criterion consistent.
What counts as a result
Based on the ad set's optimization objective.
Definitions
spendspend / sum of results in the period, dividing only onceonsite_conversion.lead_groupedoffsite_conversion.fb_pixel_leadspend of lead objective campaigns / leadspend of conversation objective campaigns / conversations startedPitfalls that already happened
Adding lead, lead_grouped and fb_pixel_lead counts each lead twice.
Use only lead for the total.
The ad sets table stores more than one version per id and the join duplicates spend.
Keep the most recent version of each ad set.
Averaging each day's cost distorts the monthly number.
Sum spend and results and divide once.
Delivery, travel and e-commerce clients were measured by leads and triggered alerts every day.
Evaluate by the campaign's objective.
In a real account, CPA went from R$ 8.39 (lead, purchase and conversation added together) to R$ 90.57 (only the objective's conversion).
Agree on the result with the client before the first report.
The instant form does not go through the website, so the lead reaches the CRM without UTMs.
Join to the CRM by form id or ad id.
lead_grouped + fb_pixel_lead. Adding all three would double the leads.Acceptance test
The case is done when every item passes.
- For one client and one closed month, each campaign's result and cost per result match the Results column in Ads Manager (difference below 1%).
- Total leads equal form leads + website leads.
- No reach, conversation or traffic campaign shows a CPL.
- The final table has one row per ad and day.
Agent package
Paste into Claude, ChatGPT or any client with the Nekt MCP connected.
Meta Ads results - Each campaign's result is the one for the ad set's optimization objective (optimization_goal and promoted_object.custom_event_type). Never classify by campaign name. - Lead = action_type 'lead'. Do not add it to onsite_conversion.lead_grouped or offsite_conversion.fb_pixel_lead; those are its components (form and website). - Ignore action_types *_add_meta_leads and onsite_web_lead. - Click = action_type 'link_click'. - Reach, impressions and profile visit campaigns have no conversion: evaluate them by CPM, reach and frequency. - Conversation campaigns: result = onsite_conversion.messaging_conversation_started_7d. A conversation is not a sale. - Cost per result = sum of spend / sum of results in the period. - If a client's objective is not confirmed, say "objective not confirmed" instead of assuming lead. Per-client exceptions: - <client>: the valid result is the custom conversion <name>; the pixel's Lead fires based on time on page and does not count. - <client>: cost reported including <x>% tax on the budget.
Build the "Meta Ads results by objective" case in my Nekt workspace following the rules at https://academy.nekt.com/en/industrias/agencias/resultado-meta-por-objetivo.md. 1) Find the source tables and confirm the columns the rules use. 2) Create a transformation at the stated grain applying every rule. 3) Run the acceptance test and show me the result of each item. 4) Create the case's context document in the workspace, leaving my clients' exceptions open for me to fill in.
Variations
One Meta Ads source per client, unified with the account to client mapping.
For VALUE or purchase objectives, use action_values for the same action_type.
LinkedIn: MAX_LEAD counts form leads, without view-through. Google: the primary conversion of the conversion action.