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:
- Capture the source of every lead: platform, campaign, ad group or audience, and keyword where there is one.
- Record one reason for every rejected lead, from a fixed list of 8–12 codes.
- Map each reason to a lever on Google, Meta or LinkedIn, or to the sales process when ads aren’t the cause.
- 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.
| Code | Class | Use it when | Don’t use it for |
|---|---|---|---|
| Wrong company type or size | Ad-fixable | A real business outside your customer profile: too small, wrong industry, a reseller when you sell to end users | A good-fit company that isn’t ready yet (use “Not now”) |
| Individual, not a business | Ad-fixable | A consumer or someone with a personal need | A sole trader who fits your profile |
| Outside service area | Ad-fixable | The company or project is somewhere you don’t serve | A good-fit buyer travelling or on a VPN who does sit inside your area |
| Job seeker or student | Ad-fixable | The person wanted a job, an internship or project help | An employee researching on behalf of a real buyer |
| Wrong product or service | Ad-fixable | They wanted something you don’t offer, often because the ad or page implied you do | A buyer of your service who also asked about something else |
| Budget below minimum | Ad-fixable | The need fits but the budget is clearly below what you can deliver for | A buyer who objected to price after a proposal (that is a sales outcome) |
| No response | Sales-process | Several attempts across channels within your follow-up window, no reply | A lead called once, a week late |
| Duplicate | Sales-process | The same person or company already has an open lead | A second person from the same company with a separate need |
| Existing customer | Sales-process | A current customer using the ad form for support or an order | A former customer with a new project |
| Not now | Timing | Good fit, real need, but the timing is months away | Anyone who doesn’t fit (timing is not a polite fit rejection) |
| Researching or competitor | Noise | Price-checking without intent to buy, or a competitor or vendor pitching to you | A 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.
| Code | Google Ads | Meta | Default decision | |
|---|---|---|---|---|
| Wrong company type or size | Search terms and keyword themes; add negatives for the wrong segment; qualify in ad copy | Tighter audience signals; name the buyer in the creative | Company size and industry targeting; check audience expansion | Act if concentrated; otherwise Review |
| Individual, not a business | Negatives such as “free”, “personal”, “home”; B2B wording in ads | Required company-name question; business wording in creative | Rare; check whether a broad interest audience is in use | Act |
| Outside service area | Location option: Presence rather than Presence or interest | Location targeting set to people living in the area; state the area in the ad | Permanent location rather than recent location | Act |
| Job seeker or student | Negatives: job, jobs, career, careers, vacancy, internship, salary | Remove wording that reads as hiring; review placements | Exclude junior seniority where it doesn’t buy | Act (cheap and low-risk) |
| Wrong product or service | Message match between keyword, ad and landing page | Creative and form headline that name the service | Ad copy and the form’s offer description | Review |
| Budget below minimum | Price anchor on the landing page; drop “cheap” and “affordable” terms | Budget-band question on the form | Budget or project-size custom question | Review (test for two weeks) |
| No response | Usually not an ad problem: response time, channel (call, WhatsApp, email) and number of attempts. Check it before touching campaigns. | Investigate follow-up | ||
| Duplicate | De-duplicate in the CRM or sheet; check that the conversion isn’t firing twice for one lead. | Investigate tracking | ||
| Existing customer | Exclude customer lists where policy and consent allow; put a support link beside the form. | Act | ||
| Not now | No targeting change. Keep them for nurture or remarketing; don’t exclude. | Wait | ||
| Researching or competitor | Only 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.
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.
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.
Top three codes (5 minutes)
Count rejections by code, then by campaign, ad group, keyword or audience. Note which codes cross the evidence thresholds.
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.
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.
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.
| Column | Type | Filled by | Notes |
|---|---|---|---|
| Lead ID | Text | Form or CRM | Unique per lead; used for de-duplication and for sending stages back to platforms |
| Date received | Date | Form or CRM | Needed to judge cohorts and update speed |
| Platform | Pick list | Automatic | Google, Meta, LinkedIn, other |
| Campaign / ad group or audience / keyword | Text | Automatic | From UTM parameters, hidden form fields or click IDs; never typed by sales |
| Status | Pick list | Sales | New, Contacted, Qualified, Rejected, Opportunity |
| Reason code | Single select | Sales | Required when status is Rejected; one of the 8–12 codes |
| Note | Free text | Sales | Optional context; never a substitute for the code |
| Owner | Name | Sales | Who is working the lead |
| Date updated | Date | Automatic or sales | Target: 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 code | Count | Share of rejects | Class | Lever | Decision |
|---|---|---|---|---|---|
| Individual, not a business | 18 | about 41% | Ad-fixable | Negatives (“free”, “personal”); required company name; B2B wording in ads | Act 14 of the 18 came from two broad-match search terms |
| Outside GCC | 10 | about 23% | Ad-fixable | Google location option to Presence; LinkedIn permanent location | Act 9 of the 10 came from one Google campaign on Presence or interest |
| Budget below minimum | 8 | about 18% | Ad-fixable | Budget-band question on the form; a starting engagement size on the landing page | Review below 20%; test for two weeks |
| No response | 5 | about 11% | Sales-process | Call within the agreed response time; WhatsApp follow-up | Investigate response times, not ads |
| Job seeker | 3 | about 7% | Ad-fixable | Negatives: job, jobs, career, careers, vacancy, vacancies | Act below thresholds, but cheap and low-risk |
| Total | 44 | 100% | |||
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.
| Code | This month | Next month | Change made | Cohort mature? |
|---|---|---|---|---|
| Individual, not a business | 18 | Negatives, company-name field, ad wording | ||
| Outside GCC | 10 | Presence; permanent location | ||
| Budget below minimum | 8 | Budget-band question (test) | ||
| No response | 5 | Response-time check (sales) | ||
| Job seeker | 3 | Job-related negatives | ||
| Cost per accepted enquiry | about 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.