Most agencies won’t tell you this: you can lose the negotiation by asking for “better results” instead of a number. I use these seven scripts to put CPA, qualified pipeline, account ownership, and the consequence of a miss in writing; replace the [BRACKETED PLACEHOLDERS], and send the ownership email at the end first.

Script 1: Get a written answer after six flat months

Use this when you are paying a retainer, results have been flat for two quarters, and another review call is unlikely to produce a commitment. Send it before the renewal conversation, while there is still time to act on the answer.

Subject: Performance review against baseline - [COMPANY NAME]

Hi [NAME],

We have paid [MONTHLY FEE, e.g. $4,000/month] for six months. In that period, our cost per acquisition moved from [BASELINE CPA, e.g. $182] to [CURRENT CPA, e.g. $179], and closed revenue attributed to search moved from [BASELINE REVENUE, e.g. $41,000/month] to [CURRENT REVENUE, e.g. $43,000/month].

Please reply in writing by [DATE, 5 business days out] with:

1. What changed in the account each month to lower CPA, with dates.
2. Current CPA and qualified pipeline versus the baselines above.
3. What you will change in the next 30 days, and the CPA target you will commit to for that period.

If we cannot agree on a dated CPA target in writing, we intend to end the retainer under our contract’s notice terms and move to handover.

Thanks,
[YOUR NAME]

A useful reply names dates, bids, budgets, and search terms cut, then connects those decisions to CPA. I used to tell clients a monthly summary was enough. I was wrong. Optimising for raw form fills can send the account chasing students, competitors, and job seekers. Ask for the change log of bid, keyword, and ad changes and cost per accepted SQL or opportunity, not another slide about visibility. If the answer is “best-in-class performance” or “CTR is up 18% while the algorithm learns,” treat that as an answer too.

The one adjustment that matters: use your last clean month before the agency started as the CPA baseline, not a blended six-month average. That is the number against which the fee has to earn its keep.

Script 2: Ask new vendors to price against CPA, not spend

Use this when you invite proposals and want to filter out vendors whose fee rises automatically with your ad budget. PPC agencies commonly quote 10–20% of monthly ad spend or a $500–$2,000 flat retainer for small accounts. At $5,000 in spend, a 15% fee is $750 before a single click. The percentage model ties their pay to spend, not revenue.

Paper agency invoice chained to a rising ad spend dial while pipeline stays flat

We spend [MONTHLY SPEND, e.g. $20,000/month] on Google Ads. Do not lead with a percentage-of-spend quote.

Quote a target cost per [QUALIFIED LEAD / SALE / BOOKED JOB] of $[TARGET CPA] within [TIMEFRAME, e.g. 90 days], measured in [CRM OR SALES SYSTEM]. State your base fee and what you will credit or rework if CPA comes in 20% above target for two consecutive months.

If you require a percentage-of-spend option for comparison, list it separately and specify which decisions that fee pays for each week.

A percentage fee can reward more spend even when cost per lead rises. Make the vendor price the outcome first. If they cannot put a target and a consequence beside their fee, the proposal is still a price list, not a performance agreement.

The one adjustment that matters: name the sales or CRM event in the brackets. “Cost per lead” gets you form fills. “Cost per booked job in [SERVICE AREA]” gets you closer to the work you meant to buy.

Script 3: Define a qualified lead before anyone quotes its cost

Use this before agreeing to a CPA target. A target based on raw leads can count spam, students, and people who read one blog post and left a free email address. What the deck calls lead volume, I call paying to find the wrong people.

A Qualified Lead for [COMPANY NAME] is a contact with job title [TITLE, e.g. manager or above], company size [SIZE, e.g. 20+ employees] in [REGION, e.g. TX and OK], who requested [OFFER, e.g. a demo or pricing] within the last 14 days.

The following never count: students, competitors, job seekers, personal email domains with no company, and any contact sales rejects with reason [NO FIT / NO BUDGET / NO RESPONSE AFTER 5 TOUCHES].

Sales will accept or reject every marketing lead within [REVIEW TIMEFRAME, e.g. 5 business days] and record a rejection reason. We measure cost per accepted SQL and cost per opportunity, not cost per form fill.

The distinction matters: an MQL has been judged a fit by marketing and passed for contact; an SQL has been examined and accepted by sales. A student with a free email address is not the same prospect as someone in your target role who requested pricing. Track the acceptance ratio, too: the guide’s ranges put under 20% as too loose, 40–70% as healthy, and over 80% as potentially too strict.

Swap in the definition that matches what you sell:

  • Ecommerce: A Qualified Order is a purchase with order value over $[MINIMUM], shipping ZIP code in [SERVICEABLE AREAS], and no return within [WINDOW, e.g. 14 days]. Do not count failed payments, wholesale sample orders, or gift-card-only redemptions.
  • Home services: A Qualified Lead is a homeowner in [ZIP CODES] requesting [SERVICE, e.g. full system replacement], with phone and address provided, who booked or was offered a time slot within [48 hours]. Do not count renters, out-of-area requests, or price shoppers who refuse a visit.
  • SaaS: A Qualified Lead is a work email from a company with [SIZE, e.g. 20+ staff] in [REGION] whose contact booked and attended a demo and holds [TITLE, e.g. manager or above]. Do not count students, personal emails, or no-shows.

The one adjustment that matters: require a reason for every rejected lead and review those reasons monthly. Otherwise “sales says the leads are bad” and “marketing says sales never follows up” can run for another quarter without anyone changing a thing. The lead-quality problem, and the shift towards pipeline, is also the point of this financial services case study.

Script 4: Put qualified pipeline in the target

Use this when a vendor quotes cost per lead but you need a target further downstream. Lead volume can make flat work look busy. Pipeline shows whether any of those leads reached a stage sales recognises.

Our target is $[MONTHLY PIPELINE TARGET, e.g. $120,000] in qualified pipeline per month from paid search within 90 days, measured in [CRM, e.g. HubSpot] at stage [EXACT STAGE, e.g. Sales Accepted].

Report weekly: spend, cost per SQL, cost per opportunity, and pipeline created. Do not report cost per lead as a success metric.

If pipeline is 20% below target for two consecutive months, we trigger the review clause in Script 5.

Clay inbox overflowing with junk lead slips while one gold pipeline slip is held up

A B2B SaaS team moved its bid target off form fills and onto closed revenue; the resulting pipeline change is documented here. The mechanism is the useful part: tell the system which downstream outcome counts, then judge it there.

The one adjustment that matters: put the exact CRM stage name in the agreement. I have heard “pipeline” mean three different stages on the same call. A named stage leaves less room for a flattering interpretation.

Script 5: Make them say what happens if they miss

Use this on the sales call after the vendor agrees to a CPA target. Anyone can agree to a number with no consequence attached. This asks for the consequence.

If cost per [SQL / OPPORTUNITY / BOOKED JOB] runs 20% above the agreed $[TARGET CPA] for two consecutive months, or if blended cost per qualified lead exceeds our baseline of $[BASELINE CPA] by 35% over the same period, we trigger a 30-day review at your cost.

During that review, you work the account without the base fee, or we exit with full handover within 14 days. Which option will you put in writing?

Best-in-class performance with no number or exit commits the vendor to nothing. I treat that as a red flag, not a promise. An answer worth discussing is dull and specific: base plus a bonus tied to qualified leads, CAC, or ROAS, or a guaranteed portion with the rest tied to outcomes, alongside a defined exit trigger. If they will not choose an option and put a date on it, you have learned how much confidence they place in their own target.

The one adjustment that matters: fill in the baseline from your CRM, not the vendor’s lead report. Their report may count fills. You need the number for accepted SQLs.

Script 6: Leave without losing the account’s history

Use this when Script 1 gets a deflection or Script 5 gets no written commitment. Keep the note short. A long exit invites another negotiation over a decision you have already made.

Subject: Ending retainer effective [END DATE] - handover request

Hi [NAME],

We will end the retainer effective [END DATE, per contract notice]. Thanks for the work to date.

Please, by [HANDOVER DATE, e.g. 14 days from today]:

1. Confirm our Admin access to Google Ads [CID], GA4 [PROPERTY NAME], Tag Manager [CONTAINER ID], Search Console [PROPERTY], and Business Profile [LOCATION].
2. Export change history, conversion settings, audiences, and the last 6 months of reports to [YOUR EMAIL].
3. Keep tracking live until handover. We will remove your manager-account access on [REMOVAL DATE].

[NEW VENDOR NAME] will contact you about read-only access during the overlap. Please confirm receipt.

Thanks,
[YOUR NAME]

Keep the history alive through the switch. The handover order that reduces account-access problems is to list every account while relations are good, secure access before notice, save reports and conversion settings, give the next vendor access to the existing accounts, and remove the old agency last. Do it backwards and you may pay someone to rebuild work you already bought.

The one adjustment that matters: name the CID and removal date. “All accounts” gives a stalled handover room to drag; an account ID and a date give everyone the same checklist.

When to hold off on the performance clauses

These scripts are not a licence to fire people over noisy data. Keep the ownership request even if your spend is small, but hold off on a hard CPA target and penalty when spend is under $3,000 a month and you have fewer than 30 conversions; that is thin evidence for judging a decent freelancer. Skip Script 5 if your CRM cannot report cost per SQL by channel. You cannot enforce a number you cannot measure. And if the agency moved CPA and your only objection is its fee, use Script 2 to renegotiate. Do not punish work that moved the number you asked it to move.

Script 7: Secure account ownership before sending the others

Use this first, while you are still on good terms. I learned the value of access at 1am, trying to mine negative keywords in an account where I could not even add a user. Whoever controls admin access controls how cleanly you can leave.

Subject: Confirming account ownership and admin access - [COMPANY NAME]

Hi [NAME],

Please confirm in writing this week:

1. Our Google Ads account [CID] is controlled by our business, billing is in our business name, and your access is through a linked manager account.
2. [YOUR EMAIL] has Admin access and can add or remove users and unlink the manager account.
3. We hold Administrator access in GA4 [PROPERTY NAME] and Tag Manager [CONTAINER ID], verified owner access in Search Console [PROPERTY], and primary owner access in Business Profile [LOCATION].

If any of those accounts or properties is controlled through your email or manager account rather than ours, please tell us what needs transferring, complete the transfer by [DATE], and confirm when it is done.

Please include the Google Ads CID and the relevant property or container IDs in your reply.

Thanks,
[YOUR NAME]

A linked manager account and an account created under an agency’s manager account can leave you with different ownership positions. Google’s manager-account ownership guidance is worth checking against what you can actually see and do in the account; a reassuring “yes” is not a substitute for access. Before giving notice, check that your email can add and remove users and unlink manager accounts, with billing in your business name. Do the same for GA4, Tag Manager, Search Console, and Business Profile. The contract principle is just as plain: the client retains the account, billing, campaigns, audiences, conversion actions, and historical data.

The one adjustment that matters: ask for IDs and verify that you can log in with the stated permissions. A vendor can agree that you “own the account” while billing or access still sits elsewhere. If I could keep only one artefact, I would keep this email: it determines whether the other six arrive as requests from the account owner or pleas from someone trying to get their own work back.