Skip to content

Guide · Sales feedback

The sales feedback loop that actually changes your ads

“The leads are bad” isn’t feedback. A reason code is. It becomes useful only when each code points to one ad lever and one decision: act, review, investigate or wait.

What should you do when sales says the leads from ads are bad?

Short answer

Ask sales to reject each lead with one reason from a short list, then review the reasons weekly by campaign, keyword or audience. Fix the reasons your ads can fix, such as wrong location, individuals or job seekers, and hand follow-up problems back to sales. Change one thing at a time.

The complaint is almost always partly right. Paid campaigns do send people who will never buy, and a sales team that spends its mornings calling them has every reason to be frustrated. But a complaint can’t be acted on. “The leads are bad” doesn’t say which leads, from which campaign, or bad in what way. A consultancy that gets students, a manufacturer that gets enquiries from outside its delivery area and a SaaS company whose demo requests never answer the phone all say the same sentence, and each needs a different fix.

The feedback loop in this guide turns the sentence into data in four steps:

  1. Capture the source of every lead: platform, campaign, ad group or audience, and keyword where there is one.
  2. Record one reason for every rejected lead, from a fixed list of 8–12 codes.
  3. Map each reason to a lever on Google, Meta or LinkedIn, or to the sales process when ads aren’t the cause.
  4. Decide weekly whether each pattern is strong enough to act on, needs review, needs investigation, or should wait.

If you haven’t yet worked out what kind of junk you are getting, start with junk leads from ads, which classifies it. This guide is the routine that keeps the classification running after the first audit.

Why “bad leads” feedback doesn’t change campaigns

Most teams already have some kind of feedback: a Slack thread, a comment column in a sheet, a monthly meeting where sales reads out the worst leads. It rarely changes a campaign, for four reasons.

  • Free text. “Not serious”, “wasted my time” and “small guy, wants it cheap” can’t be counted. Nobody can tell whether the problem is 5% of leads or 50%, or which campaign it comes from.
  • Late updates. A status changed three weeks after the lead arrived describes a campaign that has since spent three more weeks of budget. By then the keyword, audience or creative may have changed.
  • No owner. Sales thinks marketing will read it; marketing thinks sales will raise it if it matters. The feedback exists but nobody is responsible for turning it into a decision.
  • No lever. Even when a pattern is clear, nobody has agreed what it should change. “Too many small companies” could mean keywords, audience, offer, form or price anchoring, so it ends in a debate, not an edit.

The loop below fixes each one: codes instead of free text, a time limit on updates, a named owner and a map from each code to one lever.

Original framework

Which reason codes should sales use?

Short answer

Use 8–12 mutually exclusive codes in three groups: problems ads can fix (wrong company type, individual, outside service area, job seeker, wrong service, budget too small), sales-process issues (no response, duplicate, existing customer) and timing or noise (not now, researching). Avoid free text alone; add a note field instead.

CodeClassUse it whenDon’t use it for
Wrong company type or sizeAd-fixableA real business outside your customer profile: too small, wrong industry, a reseller when you sell to end usersA good-fit company that isn’t ready yet (use “Not now”)
Individual, not a businessAd-fixableA consumer or someone with a personal needA sole trader who fits your profile
Outside service areaAd-fixableThe company or project is somewhere you don’t serveA good-fit buyer travelling or on a VPN who does sit inside your area
Job seeker or studentAd-fixableThe person wanted a job, an internship or project helpAn employee researching on behalf of a real buyer
Wrong product or serviceAd-fixableThey wanted something you don’t offer, often because the ad or page implied you doA buyer of your service who also asked about something else
Budget below minimumAd-fixableThe need fits but the budget is clearly below what you can deliver forA buyer who objected to price after a proposal (that is a sales outcome)
No responseSales-processSeveral attempts across channels within your follow-up window, no replyA lead called once, a week late
DuplicateSales-processThe same person or company already has an open leadA second person from the same company with a separate need
Existing customerSales-processA current customer using the ad form for support or an orderA former customer with a new project
Not nowTimingGood fit, real need, but the timing is months awayAnyone who doesn’t fit (timing is not a polite fit rejection)
Researching or competitorNoisePrice-checking without intent to buy, or a competitor or vendor pitching to youA buyer comparing suppliers for a live requirement

Eleven codes. Keep the list between 8 and 12: fewer and the codes blur together; more and sales picks whichever is nearest the top. One code per lead, plus an optional note.

Three design rules keep the codes usable:

  • Don’t mix fit and timing. “Not interested right now” blends a wrong-fit lead with a good lead in the wrong quarter. The first is an ad problem; the second is a nurture problem. Mixing them hides both.
  • Don’t let codes describe the salesperson’s feeling. “Low quality” and “not serious” aren’t reasons. Ask what the lead would have to be for sales to accept it.
  • Separate rejection from outcome. These codes are for leads sales won’t pursue. Lost deals after a proposal need their own list (price, competitor, no decision), because they reflect the sales process more than targeting.

How rejection codes relate to your wider definition of a qualified lead is covered in lead quality. Reason codes explain why a lead was rejected; lead scoring predicts which leads will be accepted. You need the first before you can trust the second.

Original framework

The Reason Code → Ad Lever Map

Each code points to one lever per platform and a default decision. The default is where the weekly review starts, not where it has to end.

CodeGoogle AdsMetaLinkedInDefault decision
Wrong company type or sizeSearch terms and keyword themes; add negatives for the wrong segment; qualify in ad copyTighter audience signals; name the buyer in the creativeCompany size and industry targeting; check audience expansionAct if concentrated; otherwise Review
Individual, not a businessNegatives such as “free”, “personal”, “home”; B2B wording in adsRequired company-name question; business wording in creativeRare; check whether a broad interest audience is in useAct
Outside service areaLocation option: Presence rather than Presence or interestLocation targeting set to people living in the area; state the area in the adPermanent location rather than recent locationAct
Job seeker or studentNegatives: job, jobs, career, careers, vacancy, internship, salaryRemove wording that reads as hiring; review placementsExclude junior seniority where it doesn’t buyAct (cheap and low-risk)
Wrong product or serviceMessage match between keyword, ad and landing pageCreative and form headline that name the serviceAd copy and the form’s offer descriptionReview
Budget below minimumPrice anchor on the landing page; drop “cheap” and “affordable” termsBudget-band question on the formBudget or project-size custom questionReview (test for two weeks)
No responseUsually not an ad problem: response time, channel (call, WhatsApp, email) and number of attempts. Check it before touching campaigns.Investigate follow-up
DuplicateDe-duplicate in the CRM or sheet; check that the conversion isn’t firing twice for one lead.Investigate tracking
Existing customerExclude customer lists where policy and consent allow; put a support link beside the form.Act
Not nowNo targeting change. Keep them for nurture or remarketing; don’t exclude.Wait
Researching or competitorOnly act if one keyword or audience produces most of them; otherwise it is the cost of advertising.Wait, or Review if concentrated

Sources: Google location options and negative keywords; LinkedIn targeting options and Lead Gen Forms. Last checked 15 September 2026.

Two platform details change how you apply the map:

  • Google negatives don’t match close variants. Google states that negative keywords won’t match close variants or other expansions, so “job” doesn’t block “jobs”. Add the singular, plural and related forms separately (Google Ads Help).
  • LinkedIn forms have limited room to qualify. Lead Gen Forms allow up to three custom questions, as multiple choice or single-line text, plus hidden fields for values such as UTM source or campaign (LinkedIn Help). Spend a question on the reason code you see most. More in LinkedIn Lead Gen Forms and lead quality.

On Meta, the form type matters as much as the questions. See Instant Forms and lead quality for when a Higher intent form or a website form fits better. For the Google-side detail, see how to improve lead quality in Google Ads.

When is feedback strong enough to act on?

Short answer

Act when one reason code makes up a large share of rejections and clusters in one campaign, keyword or audience. Review when the pattern is real but small. Investigate when the codes contradict your tracking data. Wait when the change would restart a bidding learning period that hasn’t finished.

Small numbers are the most common trap. Three bad leads from one keyword feel like a pattern to the salesperson who called them, but three is easily chance. Equally, waiting for statistical certainty in a B2B account with 60 leads a month means never acting. A practical rule sits between the two.

A starting heuristic, not a standard

Act when a code accounts for at least 20% of rejected leads and at least 5 of them come from the same campaign, ad group, keyword or audience within two weeks. Adjust the thresholds to your volume once you have a few months of codes.

  • Act. Both thresholds met, and the lever is clear from the map.
  • Review. One threshold met, or the lever is a test rather than a fix (a new form question, a price anchor). Run it for a set period and check again.
  • Investigate. The codes contradict what the account shows, such as “outside service area” leads from a campaign already set to Presence, or duplicates rising with no change in lead volume. Check tracking and settings before changing targeting.
  • Wait. The fix changes the bid strategy or conversion goal while the campaign is still learning, or another change went live in the last week. Stacked changes make it impossible to know what worked.

One exception: changes that cost almost nothing, such as job-related negatives, can go ahead below the thresholds. The rule exists to protect reach and learning, and blocking “vacancy” threatens neither.

The weekly lead review

Twenty minutes, same day every week, two owners: the performance marketer who runs the accounts and a sales lead who can speak for the people calling the leads. The marketer owns the decisions; the sales lead owns data completeness.

  1. Check completeness (2 minutes)

    What share of last week’s leads have a status and, if rejected, a code? If it is below about nine in ten, fix that first; decisions on half the data mislead.

  2. Top three codes (5 minutes)

    Count rejections by code, then by campaign, ad group, keyword or audience. Note which codes cross the evidence thresholds.

  3. Lever and decision (8 minutes)

    For each of the three, name the lever from the map and the decision: Act, Review, Investigate or Wait. One change per campaign.

  4. Owner and re-check date (3 minutes)

    Who makes the change, by when, and the date you will look at that code again, usually two weeks later.

  5. Last week’s changes (2 minutes)

    Did the codes you acted on fall? If the cohort isn’t mature yet, say so and carry it forward.

Template

Lead Review sheet: columns to copy

Works as a spreadsheet tab or as required fields in a CRM. One row per lead.

ColumnTypeFilled byNotes
Lead IDTextForm or CRMUnique per lead; used for de-duplication and for sending stages back to platforms
Date receivedDateForm or CRMNeeded to judge cohorts and update speed
PlatformPick listAutomaticGoogle, Meta, LinkedIn, other
Campaign / ad group or audience / keywordTextAutomaticFrom UTM parameters, hidden form fields or click IDs; never typed by sales
StatusPick listSalesNew, Contacted, Qualified, Rejected, Opportunity
Reason codeSingle selectSalesRequired when status is Rejected; one of the 8–12 codes
NoteFree textSalesOptional context; never a substitute for the code
OwnerNameSalesWho is working the lead
Date updatedDateAutomatic or salesTarget: within a few working days of the lead arriving

Worked numbers

44 rejected enquiries at a Dubai consultancy

A management consultancy in Dubai runs Google Search and LinkedIn. One month: AED 24,000 spend, 80 enquiries, 36 accepted by sales and 44 rejected. Cost per enquiry is AED 300; cost per accepted enquiry is about AED 667.

Reason codeCountShare of rejectsClassLeverDecision
Individual, not a business18about 41%Ad-fixableNegatives (“free”, “personal”); required company name; B2B wording in adsAct 14 of the 18 came from two broad-match search terms
Outside GCC10about 23%Ad-fixableGoogle location option to Presence; LinkedIn permanent locationAct 9 of the 10 came from one Google campaign on Presence or interest
Budget below minimum8about 18%Ad-fixableBudget-band question on the form; a starting engagement size on the landing pageReview below 20%; test for two weeks
No response5about 11%Sales-processCall within the agreed response time; WhatsApp follow-upInvestigate response times, not ads
Job seeker3about 7%Ad-fixableNegatives: job, jobs, career, careers, vacancy, vacanciesAct below thresholds, but cheap and low-risk
Total44100%

Three of the five codes lead to changes this week, one becomes a two-week test and one goes back to sales. Nothing changes the budget or the bid strategy, because nothing in the codes says the channel is wrong; it says specific traffic inside it is. The consultancy changes the two Google items in one campaign and the LinkedIn location setting in another, so each change can be read separately.

The “no response” code deserves the same attention as the ad fixes. Five leads nobody reached may be five good leads. Checking how long they waited for a first call is the job of the sales handoff process, and fixing it costs nothing in media.

The accepted rate this month is 36 of 80, or 45%. The next review doesn’t predict what it will become; it records it.

Next month’s check: fill in at the review
CodeThis monthNext monthChange madeCohort mature?
Individual, not a business18 Negatives, company-name field, ad wording 
Outside GCC10 Presence; permanent location 
Budget below minimum8 Budget-band question (test) 
No response5 Response-time check (sales) 
Job seeker3 Job-related negatives 
Cost per accepted enquiryabout AED 667 Judge on this, not on cost per enquiry

How do you run the loop without a CRM?

Short answer

A shared spreadsheet or simple form works if every lead has a source (campaign or keyword), a status and a single rejection reason, updated within a few days. That is enough to spot patterns and fix targeting, forms and messaging. Move to a CRM when volume or team size makes the sheet unreliable.

The hard part without a CRM is not the status; it is the source. Salespeople can’t reliably type the campaign a lead came from, so capture it automatically:

  • Website forms: add UTM parameters to every ad URL and pass them into hidden form fields, so campaign and keyword arrive with the lead. Keep the click ID too (gclid on Google) if you plan to send stages back later.
  • Platform lead forms: use hidden fields on LinkedIn and the campaign and ad names in Meta’s lead export.
  • Phone and WhatsApp leads: ask the lead which service they found, and use separate numbers or pre-filled WhatsApp messages per campaign where the volume justifies it.

Then make the sheet easy to update: a pick list for status and reason, and conditional formatting that highlights rejected rows with no code. When leads are handled on WhatsApp, have the salesperson update the sheet at the end of the chat, not at the end of the week. The form-side detail is in form and capture optimisation.

The sheet stops working when more than a few people edit it, when duplicates become common or when leads exceed what one person can scan in the weekly review. That is the point to move the same columns into a CRM as required fields.

Should disqualified leads become exclusion audiences?

Short answer

Exclude leads that can never buy, such as individuals, competitors, existing customers or out-of-area companies, where your consent and platform policies allow list uploads. Don’t exclude “not now” or budget-timing rejects; they may become buyers. Refresh exclusion lists on a schedule so they stay accurate.

An exclusion list stops you paying to reach the same wrong person twice. It doesn’t stop the platform finding new people like them; that is what the lever map and a better conversion signal are for.

  • Good candidates: existing customers (who should use support, not the sales form), competitors, confirmed individuals when you only sell to businesses, and companies permanently outside your service area.
  • Poor candidates: not now, budget below minimum and no response. A company without budget this year may have it next year, and a lead nobody reached may have been a good one.
  • Policy and consent. Google’s Customer Match policy only allows customer information collected in a first-party context, requires consent where the law needs it, and makes exclusions available to policy-compliant accounts (Google Advertising Policies Help). Meta and LinkedIn list uploads carry similar obligations. Check your notice and consent under lead generation compliance before uploading.

Refresh the lists monthly. A stale exclusion list quietly blocks people whose status changed, such as a former customer with a new project.

From feedback to signal

Reason codes improve the traffic you can see. They don’t change what the bidding system is rewarding. If campaigns still report every form submission as a conversion, Google, Meta and LinkedIn keep looking for more of them, including new kinds of junk your codes haven’t met yet.

The same status column that drives the review can fix that. Once sales marks leads Qualified reliably and quickly, that status can be sent to each platform as a conversion through its offline or CRM import, so bidding learns from leads sales accepts. The reasons stay in your review; the platforms only need the stage. Which stage to send, given your volumes and the platforms’ time windows, is in which lead stage to optimise for, and how to structure the stages is in CRM lead stages for ad platforms.

This is also why update speed matters twice. A status updated three weeks late delays your weekly decisions, and it can arrive outside the window in which a platform will use it for optimisation. Compare channels on cost per qualified lead rather than cost per lead once the statuses are reliable.

What changes by company size

  • Small businesses. A spreadsheet or WhatsApp-led status update, one owner who does both marketing and the review, and the eleven codes trimmed to eight if volume is low. Monthly rather than weekly review is fine below about 40 leads a month.
  • Mid-market. Status and reason as required CRM fields with validation, so a lead can’t be closed without a code. The review includes the SDR or inside-sales lead, and the codes are reported by campaign automatically.
  • Enterprise. Governance matters as much as data: who may change targeting, which changes need approval, and a record of each change and the reason code behind it. See how Zephra handles approvals and permissions.

Failure modes

  • Free text only. Notes feel richer, but nobody counts them. Keep the note, require the code.
  • Too many codes. Twenty options produce inconsistent choices. Stay within 8–12.
  • Codes that mix fit and timing. “Not interested” hides whether the targeting or the timing was wrong.
  • Acting on two or three leads. A vivid bad lead isn’t a pattern. Use the evidence rule.
  • Late status updates. Weeks-old statuses describe campaigns that have already changed and arrive too late to help bidding.
  • Over-excluding. Uploading every rejected lead as an exclusion blocks future buyers.
  • Blaming ads for follow-up. “No response” rising while other codes fall usually points to response time, not targeting.
  • Changing everything at once. Three edits in one campaign in one week make it impossible to know which one moved the codes.

India, UAE and US notes

  • India. Many enquiries move to a phone call or WhatsApp within minutes, and the status lives in a salesperson’s chat history. A one-tap sheet or form update after each chat is the practical fix. Consent for WhatsApp and call follow-up needs care under the DPDP Act 2023; see compliance.
  • UAE. WhatsApp is often the first reply channel too, and GCC-wide campaigns make “outside service area” a frequent code when a firm only serves the Emirates. Consulting and advisory firms can adapt the Dubai scenario above; more in professional services.
  • US. SDR and BDR teams usually work in a CRM, so the codes belong in the lead-status picklist rather than a sheet. Calls and texts to leads are subject to the TCPA; check consent wording on forms before scaling follow-up.

What to measure next

  • Share of leads with a status and code within a few working days.
  • Rejections by code and by campaign, week on week.
  • Whether codes you acted on fell over the next matured cohort.
  • Median time to first contact for leads coded “no response”.
  • Cost per accepted lead by platform and campaign.

Zephra can use lead status and sales feedback, from CRM data or a spreadsheet, to assess lead quality and recommend what to change across Google, Meta and LinkedIn, with each recommendation labelled act, review, investigate or wait. See lead quality optimisation.

Questions, answered

Sales feedback loop FAQ

01How many lead rejection reasons should we have?

Between 8 and 12, each mutually exclusive, grouped into problems ads can fix, sales-process issues and timing or noise. Fewer codes blur different problems together; more codes make salespeople pick inconsistently.

02Who should own the weekly lead review?

The performance marketer who runs the ad accounts owns the decisions, and a sales lead owns data completeness. Both attend a 20-minute review each week, and each change gets a named owner and a re-check date.

03How quickly must sales update lead status?

Within a few working days of the lead arriving. Late statuses delay your weekly decisions and may arrive outside the window in which ad platforms use an imported stage for optimisation.

04Can reason codes be sent to Google, Meta or LinkedIn?

The lead status can, as a conversion through each platform’s offline or CRM import, so bidding learns from qualified leads. The reason codes are for your own decisions about targeting, forms and messaging.

05What if sales won’t fill in the reason codes?

Make the code a required field when a lead is rejected, keep the list short, and show sales the changes their codes led to. Feedback that visibly reduces bad leads gets filled in.

06How is this different from lead scoring?

Lead scoring predicts which leads are likely to be accepted. Reason codes explain why leads were rejected. The codes tell you what to change in the ads, and they also give a scoring model the outcomes it needs to be tested against.

07What if most rejections are “no response”?

Check response time and follow-up channels before changing campaigns. Leads nobody reached quickly are often a handoff problem rather than a targeting one; see the sales handoff guide.

Your accounts

Find the ad-fixable reasons in your own accounts.

The free assessment checks wasted spend, campaign structure, performance constraints and measurement gaps across Google, Meta and LinkedIn in 10–15 minutes. No CRM required, and no campaign changes.