Why audit first instead of just launching new campaigns
The instinct when you take over an account is to pause everything and start fresh. I did that early in my career and learned the hard way that it is expensive. You lose all the learning data Meta has accumulated, you reset the pixel's optimization history, and you burn 2–3 weeks of budget on a new learning phase that might land you in the same spot.
An audit tells you what is actually broken versus what is just poorly managed. Sometimes the campaigns are structurally fine but the pixel is double-firing, so the reported ROAS of 4x is really 2x. Sometimes the creative is strong but the budget is split across 12 ad sets that each spend ₹200 a day, too little for any of them to exit the learning phase. You cannot fix what you have not diagnosed.
The other reason is trust. When I walk a client through an audit document that says "your pixel fires twice on the thank-you page, your audience overlap between these three ad sets is 68%, and your best-performing creative has not been refreshed in 47 days," they understand exactly what I am going to change and why. No black-box promises, just a list of problems and fixes.
- Starting fresh wastes 2–3 weeks of learning-phase budget and discards accumulated optimization data
- An audit separates structural problems (pixel, account setup) from execution problems (creative, budget)
- A documented audit builds client trust: every change has a visible reason behind it
- Most accounts have 3–5 issues that explain 80% of the performance gap
Pixel and Conversions API: the foundation check
When I open a new client's ad account, the first thing I check is the pixel. Not the campaigns, not the creatives, not the audiences. The pixel. If the data coming in is wrong, every decision built on it is wrong too.
I open the Events Manager and look at three things. First, are the key events (Purchase, Lead, AddToCart, InitiateCheckout) actually firing? I use the Meta Pixel Helper extension and walk through the full funnel on the live site. I am checking that each event fires exactly once per action. Double-firing is the most common issue I find: the thank-you page reloads or a GTM tag fires on both the click and the page load, and suddenly every purchase is counted twice. Your reported CPA drops by half, which looks great until you check your bank account.
Second, I check whether the Conversions API (CAPI) is set up. In 2026, browser-only pixel tracking misses 15–30% of conversions due to ad blockers, ITP, and cookie restrictions. CAPI sends events server-side, and when it is paired with the pixel, Meta deduplicates using the event_id parameter. If CAPI is not running, or if it is running without proper deduplication, the account is either under-reporting (losing optimization signal) or over-reporting (inflating results).
Third, I check the event parameters. A Purchase event without a value parameter is almost useless for ROAS optimization. An AddToCart event without content_ids means your dynamic product ads cannot match the right products. I pull up 5–10 recent events in the Events Manager and verify that currency, value, content_type, and content_ids are populated correctly.
- Use Meta Pixel Helper to walk every conversion path: does each event fire exactly once?
- Check Events Manager for duplicate events: the top cause of inflated ROAS reporting
- Verify CAPI is live and deduplicating with event_id (not just fbp/fbc matching)
- Confirm Purchase events carry value and currency; AddToCart events carry content_ids
- Test on both mobile and desktop: pixel behaviour often differs across devices
Account structure: campaigns, ad sets, and the consolidation question
After the pixel, I map out the full account structure. I want to see every active campaign, every ad set, and how budget flows through them. The single most common structural problem in Indian accounts spending ₹2–10L per month is fragmentation: too many campaigns, too many ad sets, each with too little daily budget to exit the learning phase.
Meta needs roughly 50 conversion events per ad set per week to fully optimize delivery. At a CPL of ₹300, that means an ad set needs to spend at least ₹15,000 per week, or about ₹2,100 per day. If an ad set is running at ₹500 per day, it will never leave the learning phase, and its delivery will be erratic and expensive. I count how many ad sets are stuck in "Learning" or "Learning Limited" status. If more than half are, the account needs consolidation, not more campaigns.
I also check campaign objectives. I regularly see traffic campaigns being used to generate leads, or reach campaigns being used when the goal is conversions. Each objective tells Meta's algorithm what to optimize for. A traffic campaign optimizes for link clicks, which means Meta shows your ad to people who click on everything, not people who buy. Mismatched objectives are a silent budget drain that shows up as high CTR but terrible conversion rates.
The ideal structure for most Indian D2C or lead-gen accounts spending ₹3–8L per month is 2–4 campaigns (prospecting, retargeting, and optionally a testing campaign), with 3–5 ad sets each. Fewer, larger ad sets beat many small ones almost every time.
- Count ad sets in "Learning" or "Learning Limited": more than 50% means the account is fragmented
- Each ad set needs roughly ₹2,000–2,500 per day minimum to exit learning at typical Indian CPLs
- Verify campaign objectives match the actual business goal (conversions, not traffic or reach)
- Target structure for ₹3–8L per month accounts: 2–4 campaigns, 3–5 ad sets each
- Check for duplicate audiences across ad sets within the same campaign (Meta will compete against itself)
Audience overlap and frequency: the hidden cost
Audience overlap is the problem nobody checks until performance starts declining for no visible reason. When two or more ad sets target overlapping audiences, Meta enters your own ads into the same auction against each other. You bid against yourself, CPMs rise, and delivery gets throttled on one or both ad sets.
I use the Audience Overlap tool in Meta Ads Manager (under Audiences, select 2–5 audiences, then choose "Show Audience Overlap"). Any overlap above 30% is a flag. Above 50% is an immediate problem. I have seen accounts where three "different" lookalike audiences had 72% overlap because they were all built from the same seed list at 1%, 2%, and 3% expansion. They looked separate on paper but were essentially the same people.
Frequency is the other side of this coin. I pull frequency at the ad set level for the last 14 and 30 days. For prospecting campaigns, frequency above 2.5 in 7 days means the audience is saturating. For retargeting, I allow higher frequency (up to 4–5 in 7 days) but watch for rising CPAs. In smaller Indian markets like Belgaum or Nashik, saturation hits faster than in Mumbai or Delhi. When I ran campaigns for GSS College in Belgaum, impressions hit 5x the reach, which is the textbook signal that the audience pool is exhausted and creative refresh matters more than budget increases.
The fix for overlap is consolidation. Merge overlapping audiences into one broader ad set, or use audience exclusions so each ad set reaches a distinct segment. For frequency, the fix is usually creative rotation: new angles, new formats, and new hooks, not a bigger budget thrown at the same tired ad.
- Use the Audience Overlap tool: flag anything above 30%, act on anything above 50%
- Check frequency at the ad set level for 7-day and 30-day windows
- Prospecting frequency above 2.5 per 7 days signals audience saturation
- Smaller Indian markets (Tier 2/3 cities) saturate faster: plan creative refresh cycles of 2–3 weeks
- Fix overlap by merging audiences or adding exclusions, not by creating yet another ad set
Creative fatigue: diagnosing what the audience is tired of
Creative fatigue is the number one reason performance declines in accounts where nothing else has changed. The pixel is fine, the structure is fine, the audiences are fine, but the ads have been running unchanged for 30–60 days and the audience has simply stopped responding.
I pull ad-level data for the last 30 days and sort by frequency and CTR trend. The pattern of fatigue is unmistakable: CTR drops week over week while frequency climbs. An ad that started at 2.1% CTR and is now at 0.8% after four weeks has not gotten worse. The audience has just seen it too many times. I flag any ad where CTR has dropped more than 40% from its first-week average.
I also look at creative diversity. How many distinct visual concepts are running? Not how many ads (because five ads with the same product photo and slightly different text are one concept, not five). A healthy account at ₹3–5L per month spend should have 3–5 genuinely different creative concepts in rotation at any time: different formats (static, video, carousel), different hooks (problem-focused, benefit-focused, testimonial), and different visual styles.
For D2C e-commerce clients like Vega Auto or Zooni Jewellery, I specifically check whether the account has a mix of product-focused and lifestyle creatives, whether UGC or testimonial content exists, and whether video ads include a hook in the first 3 seconds. The first 3 seconds determine whether someone watches or scrolls, and I have seen accounts where every video opened with a logo animation. That is a skip, not a hook.
- Sort ads by frequency and CTR trend over 30 days: declining CTR plus rising frequency equals fatigue
- Flag any ad where CTR has dropped 40%+ from its first-week performance
- Count distinct creative concepts, not ad count: 5 ads with the same photo is 1 concept
- Healthy accounts at ₹3–5L per month need 3–5 distinct concepts in rotation
- Check video ads for a strong opening hook in the first 3 seconds (not a logo animation)
Budget allocation and bidding strategy
Budget allocation is where I often find the biggest gap between what the account is doing and what it should be doing. The most common mistake is an even split: ₹5L monthly budget divided equally across 10 ad sets at ₹1,666 per day each. That is not a strategy. That is a spreadsheet.
I look at the last 30 days of ad set performance and identify the top 3 performers by CPA or ROAS. Then I check what percentage of the total budget those top performers received. In a well-managed account, the top 20–30% of ad sets should receive 60–70% of the budget, because you want to scale what works and starve what does not. If every ad set gets the same amount, the account is subsidizing poor performers at the expense of good ones.
On bidding, I check whether the account is using the right bid strategy for its maturity. New accounts or accounts with fewer than 50 conversions per week per ad set should use lowest-cost (automatic) bidding. Switching to cost caps or ROAS targets before you have enough conversion volume is a common mistake: Meta does not have enough data to hit your target, so it restricts delivery and you end up spending less than your budget while missing your goals. I have seen accounts with a ₹5,000 daily budget that only spent ₹800 because the cost cap was set too aggressively.
For mature accounts with consistent conversion volume, I evaluate whether cost caps or ROAS targets make sense. For D2C clients chasing a 3–5x ROAS target, minimum ROAS bidding works well once the ad set has cleared 50+ weekly conversions. For lead-gen clients where I need a CPL under ₹400, a cost cap of ₹350–₹380 (set 10–15% below the target) gives Meta room to find efficient pockets without overspending.
- Check budget distribution: top 20–30% of ad sets by performance should get 60–70% of spend
- Even budget splits across ad sets are a red flag, not a strategy
- New or low-volume accounts belong on lowest-cost bidding, not cost caps or ROAS targets
- Cost caps work best when set 10–15% below your actual CPA target to give Meta headroom
- Flag any ad set spending less than 70% of its daily budget: the bid strategy is likely too restrictive
Landing page alignment: where the ad ends and the sale begins
I check every active ad's landing page, and I am specifically looking for three things: message match, load speed, and mobile experience. An ad that promises "Flat 30% off on all helmets" should land on a page showing helmets at 30% off, not the homepage. This sounds obvious, but I find message mismatches in roughly half the accounts I audit.
Load speed matters more than most marketers think, especially in India where a significant share of the audience is on 4G connections in Tier 2 and Tier 3 cities. I run every landing page through Google PageSpeed Insights. If the mobile score is below 50, that page is losing conversions before anyone reads a word. For one e-commerce client, improving mobile load time from 6.2 seconds to 2.8 seconds dropped the bounce rate by 34% and improved ROAS from 2.8x to 4.1x with no changes to the ads themselves.
I also check whether the landing page has the Meta pixel firing correctly on it (separate from the sitewide check). If the ad sends traffic to a specific product page or landing page, I verify that ViewContent fires on load, AddToCart fires on the button click, and the purchase flow is tracked end to end. A broken funnel on one landing page can silently break optimization for every ad pointing to it.
- Verify message match: the ad's promise must appear on the landing page above the fold
- Run Google PageSpeed Insights on every landing page: flag mobile scores below 50
- Target mobile load time under 3 seconds for Indian Tier 2/3 audiences
- Check that ViewContent, AddToCart, and Purchase events fire correctly on the landing page's funnel
- For lead-gen, confirm the thank-you page fires the Lead event exactly once (not on page refresh)
Reporting setup: making sure the numbers mean something
The last part of my audit is the reporting layer. I check three things: attribution settings, custom columns, and whether the account has any automated rules running.
On attribution, I verify which attribution window each campaign is using. Meta defaults to 7-day click and 1-day view. For lead-gen campaigns, that is usually fine. For e-commerce with a longer purchase cycle (furniture, electronics, high-end fashion), I check whether 7-day click is capturing enough of the conversion path or whether the team should also monitor 28-day click data in the breakdown. I also check whether any campaigns are using 1-day click attribution, which is too narrow for almost everything and under-reports by 30–50%.
Custom columns tell me whether the previous team was actually reading the right data. I look for whether CPA, ROAS, frequency, and CPM are visible in the default view. If the reporting columns only show reach, impressions, and clicks, nobody was watching the metrics that matter. I set up a custom column preset that includes: amount spent, results, CPA, ROAS (for e-commerce), frequency, CPM, CTR (link), and landing page views. Landing page views versus link clicks is an important gap: if link clicks are 1,000 but landing page views are 600, 40% of your traffic is bouncing before the page loads.
Finally, I check for automated rules. Some accounts have old rules still running that pause ads below a certain CTR or increase budgets when CPA is below a threshold. Forgotten rules are dangerous: they make changes nobody authorized based on logic nobody remembers setting up. I list every active rule, review its logic, and either confirm it with the client or turn it off.
- Verify attribution windows: 7-day click and 1-day view is the right default for most campaigns
- Flag any campaign on 1-day click attribution: it under-reports conversions by 30–50%
- Set up columns showing CPA, ROAS, frequency, CPM, CTR (link), and landing page views
- Compare link clicks to landing page views: a large gap means slow pages or broken URLs
- Audit all automated rules: forgotten rules make unauthorized changes on outdated logic
Putting it together: the audit document I deliver
After running through every section above, I compile the findings into a single document for the client. It is not a 40-page report. It is usually 3–5 pages: a summary of the top issues, a severity rating (critical, important, minor) for each finding, and a recommended fix with a timeline.
Critical issues are things that corrupt data or waste budget immediately: a double-firing pixel, a traffic campaign running where a conversions campaign should be, or a cost cap so tight the account cannot spend its budget. These get fixed in the first 48 hours.
Important issues are structural: audience overlap, creative fatigue, poor budget allocation. These get addressed in the first 1–2 weeks as I rebuild or restructure the campaigns. Minor issues are reporting gaps, missing custom columns, or suboptimal attribution windows. These get cleaned up as part of the ongoing management.
The goal of this audit is not to impress anyone with how many problems I can find. It is to build a clear, prioritized plan so every rupee of ad spend after this point is accountable. I have run this process on accounts spending ₹50,000 per month and accounts spending ₹8,00,000 per month. The checklist is the same. The problems are the same. The fix is always to stop guessing and start reading the data that was there all along.
- Deliver a 3–5 page document: summary, severity ratings, fixes with timelines
- Critical issues (data corruption, wrong objectives) get fixed in the first 48 hours
- Important issues (structure, audiences, creative) are rebuilt in weeks 1–2
- Minor issues (reporting, columns) are cleaned up during ongoing management
- The audit becomes the roadmap: every optimization in the first month traces back to a finding
