Your client approved the WordPress build three weeks ago. Staging is up, the ACF fields are wired, content freeze is two days out. Then the email lands:
Looks great! Can we add just one more page, a members area where our customers log in and download their files?
It sounds like one page. It isn’t. And the way most agencies answer that email, with a quick “sure, we can look at that”, is how a profitable build turns into a month of unpaid work and an awkward final invoice.
Here’s the process that keeps the relationship intact and the margin where you priced it.
Why “one more page” is never one more page
Clients estimate effort from what they can see. They see a page. You see everything that has to happen before that page exists on production:
- A membership plugin decision, a licence to buy, and a renewal someone has to pay every year.
- Gated content. A new custom post type or a restricted category, plus capability checks so a logged out visitor can’t deep link the PDF.
- Account plumbing nobody scoped: registration, password reset, logged in menu state, and transactional emails that need to look like the brand instead of default WordPress.
- A block or page builder template for the member dashboard, styled to match a design that never included one.
- Caching rules. Your host caches hard, and a logged in area that serves someone else’s cached dashboard is not a bug you want to meet after launch.
- Testing across roles, on mobile, on staging, then again on production after the migration.
None of that is exotic. It’s normal WordPress work. The problem isn’t difficulty. The work is real, it was never priced, and the client honestly believes they asked for something small.
Decide whether it’s in scope or out of scope
Do this before you reply, and do it against the document the client signed, not against your memory of the kickoff call. Three questions settle almost every case.
- Is it named in the approved deliverables? If your proposal says “12 pages, contact form, blog, WooCommerce catalogue”, a members area isn’t hiding inside that list.
- Would you have quoted differently if it had been on the list at proposal time? If yes, it’s out of scope. That’s the whole test.
- Is it a defect or a change? A contact form that doesn’t send is a defect. You fix it today, free. A contact form that now has to push leads into HubSpot is a change.
There’s a fourth category worth naming out loud: the genuinely small ask. Swap a hero image, fix the footer year, change a button label. Absorb those without ceremony. Running a formal process over fifteen minutes of work makes you look bureaucratic and costs more goodwill than it recovers in fees. Save the process for work that moves money or dates.
Write the request down before you price it
Most disputes aren’t about money. They’re about two people remembering a Slack thread differently. Capture, in one place:
- What was asked, in the client’s own words. Paste the sentence. Don’t translate it into your language, because your translation is what they’ll later say they never agreed to.
- Who asked, and when. The marketing coordinator asking on a Friday isn’t the same event as the owner asking on a call.
- What it touches. Theme, plugins, templates, hosting plan, third party accounts.
- What you’re explicitly not doing. This is the line agencies skip and regret. “Member self service billing is not included” costs one sentence now and saves a week later.
Price the change, and price the calendar too
Two numbers matter to the client, and only one of them is money.
Cost. Estimate in the roles that actually do the work: development, design, QA, project management. Then add the third party costs the client will carry, like plugin licences, a bigger hosting tier, an SMTP or CRM plan. Label recurring costs as recurring. A client who discovers a renewal twelve months later feels sold to.
Time. Give the impact on the launch date, not the hours. “Fourteen hours” means nothing to someone with a campaign booked. “This moves launch from the 14th to the 21st” means everything, and it’s the sentence that makes some clients decide the feature can wait for phase two. That’s a perfectly good outcome for both of you.
Add the knock on effects if they exist. Content freeze slips, the photographer is booked for the old date, the paid campaign starts whether the site is ready or not.
Get an explicit yes, from the person who can spend money
“Sounds good” in a Slack thread isn’t approval. It’s enthusiasm. Approval is a written yes to a specific scope, a specific price and a specific new date, from the person who signs off budget.
In practice that means:
- Approval sits on the same document as the price and the date, so nobody can approve the feature while disputing the number.
- It’s timestamped and stored somewhere neither side can quietly edit.
- Declining is a first class option. Clients answer faster when saying no is easy, because the decision stops feeling like a trap.
- The request has an expiry. “This quote holds until the 20th, after that the launch date moves again” turns an open ended maybe into a decision.
Start building only after the yes
This is the discipline that pays for the whole process. Starting early to be helpful wrecks your position. Once the members area is half built you can’t credibly say it costs extra, and the client has learned that asking is enough.
If the request really is urgent and approval will take days, timebox it out loud. “We’ll spend two hours on technical discovery so the estimate is accurate, billed either way.” Get a yes to that smaller thing first.
Keep the history, because the invoice is where it gets tested
At the end of a build, someone on the client side who sat in none of those conversations reviews an invoice that’s 30% over the proposal. Your defence isn’t a good memory. It’s a list: five changes, each with the original request, the price, the date impact, and the name and timestamp of whoever approved it.
That history has a second use nobody talks about. After three projects you can see that discovery keeps missing integrations, or that one client generates eleven changes per build while another generates none. The first insight fixes your proposals. The second fixes your pricing.
What it looks like in practice
Doing this without adding an admin job
Every agency owner reading this already agrees with the process. The reason it doesn’t happen is that it’s tedious. Writing the mini quote, chasing the approval, remembering which of four in flight changes the client actually confirmed, then reconstructing all of it at invoice time. That’s a job, and it lands on the person with the least free time.
That’s the part StayScoped takes over. You write the change once, add the cost and the new date, and send a link. Your client opens it with no account and no login, reads what changes, and approves or declines. The answer is recorded against the project with their name and the time. When you invoice, the trail is already there.
Try it free
Price the next “one more page” before you build it.
Write the change once, add the cost and the new launch date, then send your client a link they can approve or decline in two minutes. No account for them, no spreadsheet for you.
14 days free · no card · one price per team