Seatext library / BotRefund evidence
How to Calculate the Expected Duplicate Rate for Your Meta Ad Leads: A Step-by-Step Worksheet
Calculate your Meta ad lead duplicate rate by exporting lead data from Ads Manager and your CRM, deduplicating on email, phone, and IP address, then dividing duplicate submissions by total submissions over a representative...
✓ Built for advertisers who need clear, refund-ready traffic evidence.
Quick Answer: The Duplicate Rate Formula
Duplicate rate = (Total lead submissions – Unique leads) / Total lead submissions × 100.
Pull 30 days of lead data from Meta Ads Manager (or your form handler) and your CRM. Deduplicate on email, phone number, and IP address. Count how many rows remain after deduplication. Subtract that from the raw submission count. Divide by raw submissions. Multiply by 100. That percentage is your duplicate rate.
Why Duplicate Rate Matters for Meta Campaigns
Duplicate leads inflate your reported cost per lead and poison Meta’s optimization signals. When the same person—or the same bot—submits multiple times, the pixel records multiple conversion events. Meta’s algorithm then optimizes for more of that behavior, wasting budget on low-quality traffic. The BotRefund team notes that “a high reported lead count paired with no calls connected, demos booked, qualified opportunities, or repeat engagement” is a classic CRM outcome signal of invalid traffic (source). Duplicate submissions are often the first visible symptom.
Step 1: Define Your Identification Keys
Before exporting data, decide which fields define a unique lead. Common keys:
- Email address – most reliable for B2B and high-intent B2C.
- Phone number – normalize formats (strip +, dashes, spaces) before comparing.
- IP address – catches duplicates from shared networks or botnets; use with caution for mobile traffic where IPs rotate.
- Click ID (FBCLID/FBCLID) – Meta appends this to landing-page URLs; each click gets a unique ID, so repeated submissions from the same click ID are almost always duplicates or bot retries.
Choose at least two keys. Email + phone covers most legitimate duplicates. Add IP or Click ID if you suspect automated traffic.
Step 2: Export Raw Lead Data
- In Meta Ads Manager, go to Reports → Create Report. Select Leads as the data source. Choose a 30-day window that reflects typical spend (avoid holiday spikes).
- Include columns: Lead ID, Form ID, Email, Phone, Submission Time, Campaign, Ad Set, Ad, Placement, FBCLID (if available via UTM or pixel).
- Export as CSV.
- From your CRM or form backend, export the same fields for the same date range. Match column names.
Step 3: Clean and Normalize
- Lower-case all email addresses.
- Strip non-numeric characters from phone numbers; keep only the last 10 digits for US numbers.
- Remove rows where all key fields are blank (test submissions, incomplete loads).
- Flag rows with disposable email domains (e.g., mailinator.com, 10minutemail.com) – these often indicate low-intent or bot traffic.
Step 4: Deduplicate in a Spreadsheet or Script
Spreadsheet method (Excel/Google Sheets):
- Combine Meta and CRM exports into one sheet. Add a Source column ("Meta" or "CRM").
- Create a helper column:
=LOWER(TRIM(Email)) & "|" & REGEXREPLACE(Phone, "[^0-9]", "")(adjust for your locale). - Use Data → Remove Duplicates on the helper column. Keep the first occurrence.
- Count rows before and after. Duplicate count = Before – After.
SQL/Python method (for larger volumes):
SELECT COUNT(*) AS total_submissions,
COUNT(DISTINCT LOWER(email) || '|' || REGEXP_REPLACE(phone, '[^0-9]', '')) AS unique_leads,
(COUNT(*) - COUNT(DISTINCT LOWER(email) || '|' || REGEXP_REPLACE(phone, '[^0-9]', ''))) * 100.0 / COUNT(*) AS duplicate_rate_pct
FROM leads
WHERE submitted_at >= CURRENT_DATE - INTERVAL '30 days';
Step 5: Segment by Campaign, Placement, and Creative
A single aggregate rate hides the real problem. Repeat the calculation grouped by:
- Campaign – which objective or funnel stage produces duplicates?
- Placement – Audience Network and Reels often show higher duplicate rates. BotRefund research finds “Clicks originating from the Audience Network have historically shown high click-through rates (CTRs) and near-instant bounce rates” (source).
- Creative – lead-gen forms with auto-fill fields attract more accidental double-submits.
- Device/OS – mobile web vs. in-app browser.
Export a pivot table: rows = Campaign/Placement, values = Total Submissions, Unique Leads, Duplicate Rate %. Sort by Duplicate Rate % descending.
Step 6: Distinguish Legitimate Duplicates from Fraud Signals
Not every duplicate is bad. Common legitimate reasons:
- User submitted, didn’t see confirmation, submitted again (check timestamps – within 2–5 minutes).
- User filled form on mobile, then again on desktop (same email, different IP/device).
- Shared household or office IP (same IP, different emails).
Fraud/bot patterns to flag:
- Burst timing: “Several leads arriving in short bursts, forms submitted immediately after landing” (source).
- Identical field structure: every field filled in the same order, no corrections, no scroll events.
- Disposable emails + same IP: multiple different disposable domains from one IP.
- Click ID reuse: same FBCLID appearing across multiple lead IDs.
Mark each duplicate cluster as Legitimate, Suspect, or Confirmed Bot based on these signals.
Step 7: Build a Monitoring Dashboard
Automate the calculation so you catch spikes early:
- Schedule daily exports from Meta (via API or scheduled report email).
- Append to a BigQuery/Sheets/Snowflake table.
- Run the deduplication query daily; store daily duplicate rate per campaign/placement.
- Set alerts: if any segment’s 7-day rolling duplicate rate exceeds your baseline by >50%, notify the media buyer.
BotRefund’s detection layer automates this by capturing “Click IDs for dispute evidence” and “generat[ing] compliance-ready refund reports” (source), but a spreadsheet dashboard works for teams under $10K/mo spend.
Key Facts from BotRefund’s Meta Traffic Research
| Signal | What to Watch | Why It Indicates Duplicates/Bots |
|---|---|---|
| Contactability | Disconnected numbers, invalid email domains, repeated addresses, unusual country-code concentration | Duplicate submissions often use fake or recycled contact data |
| Timing | Bursts of leads in seconds/minutes; instant form submit after page load | Human users rarely submit multiple forms in <5 seconds |
| Session Behavior | No scrolling, no field corrections, uniform click paths, <1s time on page | Bots follow scripted paths; humans hesitate, scroll, correct typos |
| Campaign Patterns | Sharp lead-quality differences by placement, creative, audience expansion | Audience Network and auto-placements correlate with higher duplicate/fraud rates |
| CRM Outcome | High lead count, zero calls connected, zero demos booked | Duplicates inflate lead volume without adding pipeline |
| BotRefund Benchmark | ~20% of ad traffic identified as bots; 83% refund success rate for high-volume advertisers | Duplicate rate is a leading indicator of the bot traffic BotRefund helps recover |
Common Mistakes That Inflate or Hide Duplicate Rates
| Mistake | Effect | Fix |
|---|---|---|
| Deduplicating only on email | Misses phone-only duplicates; overstates unique leads | Use composite key: email + phone + IP |
| Using a 7-day window | Too noisy; weekend/weekday variance skews rate | Use 30-day rolling window; compare month-over-month |
| Ignoring CRM-side duplicates | Meta may dedupe but CRM creates new records per submission | Export from both sources; dedupe combined set |
| Not normalizing phone formats | +1-555-123-4567 vs 5551234567 counted as two leads | Strip all non-digits; keep last N digits per country |
| Treating all duplicates as fraud | Wastes time blocking legitimate users | Segment by timing, device, and behavioral signals before acting |
Limitations of This Method
- Cross-device duplicates: A user who submits on phone then desktop with different emails/phones won’t be caught without probabilistic matching (fingerprinting, login IDs).
- IP rotation: Mobile carriers and VPNs rotate IPs; IP-based dedupe produces false negatives.
- Meta’s own deduping: Ads Manager may already filter some duplicates before you see them, so your raw export is post-filter. Compare with CRM raw data to see the full picture.
- Attribution window: Leads attributed to a click from 28 days ago may appear in a 30-day export but reflect older traffic. Align windows carefully.
- No behavioral data in exports: Meta lead exports don’t include scroll depth, mouse movement, or time-on-page. For that, you need client-side tracking (BotRefund’s approach) or a form analytics tool.
Verification Step: Cross-Check with Downstream Metrics
After you calculate the duplicate rate, verify it correlates with business outcomes:
- Pull CRM data: Leads Created vs. Leads Contacted vs. Leads Qualified for the same period.
- Calculate Contact Rate = Contacted / Leads Created.
- If Duplicate Rate > 15% and Contact Rate < 30%, you likely have a bot/form-spam problem, not just user error.
- Run the same duplicate-rate calculation on Qualified Leads only. If qualified-lead duplicate rate is near zero, your duplicates are low-intent or fraudulent.
This verification step separates “duplicate submissions” from “duplicate opportunities.” Only the latter costs you sales time.
Frequently Asked Questions
What’s a “normal” duplicate rate for Meta lead-gen forms?
There’s no universal benchmark, but BotRefund’s data suggests “20% of your ad traffic is bots” (source). For lead-gen forms, a duplicate rate under 5% is typical for clean campaigns. Rates above 10% warrant investigation; above 20% usually indicates bot traffic or Audience Network placement issues.
Should I turn off Audience Network to reduce duplicates?
Test first. Duplicate rates are often higher on Audience Network because “Many publishers on this network use automated bots to click on ads displayed in their apps to generate artificial publisher revenue” (source). Run a 7-day A/B: one ad set with AN on, one with AN off. Compare duplicate rates and qualified-lead volume. If AN brings volume but 3x the duplicate rate, exclude it.
Can I use Meta’s built-in duplicate filtering?
Meta deduplicates within a single form submission session (same user, same form, short window). It does not deduplicate across forms, campaigns, or days. You still need your own calculation.
How does duplicate rate affect Meta’s algorithm?
Each duplicate submission fires a conversion event. Meta’s optimization sees more “conversions” from that placement/creative/audience and bids more aggressively there. This amplifies waste. BotRefund warns that “when these bots trigger conversion events on your pages, they poison your Meta Pixel data. This makes Meta’s machine learning systems optimize targeting for bots rather than real buyers” (source).
What tools automate this without spreadsheets?
- BotRefund: Installs in ~1 minute, captures FBCLIDs, detects behavioral anomalies (pointer behavior, speed, motion, session duration), and generates refund-ready reports (source).
- Zapier/Make + Sheets: Auto-export Meta leads daily, run dedupe formula, alert on thresholds.
- BigQuery + Looker Studio: For spend >$50K/mo; scheduled queries, dashboards, anomaly detection.
When should I request a refund from Meta for duplicate/bot leads?
Meta’s refund policy covers “invalid activity”—automated clicks, click farms, accidental taps. Duplicate leads alone aren’t a refund reason unless you can tie them to behavioral evidence of non-human traffic (superhuman speed, no scroll, trap interactions). BotRefund’s process: “prove invalid clicks, prepare the evidence, and negotiate directly with Google and Meta to recover wasted ad spend” (source). Their reported success rate is 83% for high-volume advertisers.
Does a high duplicate rate mean my creative or offer is bad?
Not necessarily. A confusing form (unclear submit button, no thank-you message) causes accidental double-submits. Fix UX first: disable button on click, show instant confirmation, redirect to a distinct thank-you page. Then re-measure. If duplicate rate drops, it was UX. If it stays high, investigate traffic quality.
Further reading and comparison sources
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
How BotRefund can help
BotRefund installs on your site in about one minute and captures the behavioral evidence Meta requires for refund disputes: FBCLIDs linked to pointer behavior, speed, motion, and session-duration anomalies. It detects the bot patterns that create duplicate leads—superhuman input speed (<1ms), grid-aligned movement, absence of humanlike mouse tremor, and honeypot trap interactions—and packages them into compliance-ready reports. The team then negotiates directly with Meta on your behalf, with an 83% refund success rate for high-volume advertisers. If your duplicate-rate audit shows bursts of instant submissions from Audience Network placements, BotRefund can quantify the invalid share and recover the wasted spend. No credit card required to start the free bot audit.