How to Bulk Update CTA Text in HubSpot
You've been using "Request a Demo" as your primary call-to-action for the past year. It's on 60 blog posts, 12 landing pages, and scattered throughout your knowledge base. Now your marketing team has decided — based on A/B testing, competitive analysis, or just a gut feeling — that "Start Free Trial" converts better. Time to update everything.
If you've done this in HubSpot before, you already know the pain. HubSpot's CTA tool (the legacy one) lets you update a CTA globally if you used the HubSpot CTA embed feature. But if your call-to-action text lives in inline buttons, anchor text, or raw HTML modules — which is the case for most real-world HubSpot sites — you're looking at a page-by-page editing marathon.
This guide covers the different ways CTA text shows up in HubSpot content, and how to update it efficiently regardless of how it was implemented.
Understanding where CTA text lives in HubSpot
Before you start editing, it's worth understanding the different places call-to-action text can appear, because each one requires a different approach.
HubSpot CTA tool (legacy)
HubSpot's legacy CTA feature lets you create reusable call-to-action buttons and embed them across pages using a snippet. When you update the CTA in the CTA tool, the text changes everywhere it's embedded. This is the ideal scenario — update once, done everywhere.
However, HubSpot has been phasing out legacy CTAs in favor of the newer CTA (beta) system, and many teams have moved away from using the embed approach altogether in favor of native buttons and links within their templates.
Inline buttons in the drag-and-drop editor
If your pages use the drag-and-drop editor, CTA buttons are typically added as Button modules. Each button is an independent module on each page — there's no shared reference. Changing the text on one page's button has zero effect on any other page. To update all of them, you need to edit each page individually.
Text links and anchor CTAs
Many blog posts include call-to-action text as inline hyperlinks within the body copy: "Ready to get started? Request a Demo" as part of a paragraph. These live inside rich text modules, and again, each instance is completely independent.
Hardcoded in templates or modules
Sometimes CTA text is baked into a custom template or a global module. If your developer built a "CTA Banner" custom module with default text, you might be able to update the default in one place. But any pages where the text was overridden at the page level will still show the old text.
The manual approach (and why it doesn't scale)
The straightforward way to update CTA text in HubSpot:
- Go to Marketing > Website > Blog (or Site Pages, or Landing Pages)
- Open each page in the editor
- Find the CTA text — whether it's a button module, inline link, or text in a rich text block
- Edit the text
- Click Update or Publish
- Repeat for every page
For 5 pages, this is fine. For 50, it's a day of work. For 200+, you're going to start wondering if there's a better way. There is.
Option 1: HubL and smart content (limited)
If you're technically inclined, you can use HubL (HubSpot's templating language) to centralize CTA text. For example, you could create a global module with a text field for your CTA, and reference it across templates:
{% module "global_cta" path="@hubspot/cta" label="Global CTA" %}
This only works if you set it up before creating all those pages. Retrofitting existing content to use a global module still requires editing every page to swap out the hardcoded CTA for the module reference. It's a good practice going forward, but it doesn't solve the immediate problem.
Option 2: Find and replace across HubSpot content
The most direct solution for updating existing CTA text is to search for the old text and replace it with the new text across all your content at once.
HubSpot doesn't have a built-in find-and-replace feature for CMS content. The page editor has Ctrl+F for searching within a single page, but nothing that works across pages.
With a tool like SearchReplace, you can search for the old CTA text and preview every replacement before committing:
The workflow:
- Connect your HubSpot portal
- Select "Blog Posts" (or whichever content type you need)
- Search for
Request a Demoacross all post body content - Set the replacement to
Start Free Trial - Preview every match — see exactly which pages will change and what the new text will look like
- Apply the changes in one operation
This handles inline text, button labels, and any other place the string appears in your content. And because you get a preview of every change before it's committed, you can catch edge cases — like a blog post that says "We don't just request a demo — we do a full onboarding" where you wouldn't want the replacement to happen.
Option 3: HubSpot CMS API scripts
For developers comfortable with the HubSpot API, you can write a script that:
- Lists all blog posts via the
GET /cms/v3/blogs/postsendpoint - For each post, searches the
post_bodyfield for the old CTA text - Replaces it and updates the post via
PATCH - Publishes the update
This works, but there are gotchas. The blog post body is stored as HTML, so you need to be careful not to break any surrounding markup. A naive string replacement on Request a Demo might also match text inside HTML attributes, alt text, or metadata where you don't want it changed. You also have no easy way to undo the changes if something goes wrong — you'd need to write a separate rollback script using the revision history.
Tips for CTA text updates
Be specific with your search. If your old CTA text is something generic like "Learn More," it will appear in many contexts where it's not actually a call-to-action. Search for the exact string including any surrounding HTML if needed, or use the preview feature to manually exclude false positives.
Check both CMS and CRM. If your sales team uses email templates with CTA buttons, those templates might contain the old text too. Same for email sequences, snippets, and saved responses.
Update your CTA in forms and pop-ups too. HubSpot forms have submit button text, and pop-up CTAs have their own button labels. These are separate from page content and won't be caught by a CMS-only search.
Don't forget about CTA URLs. If you're changing from "Request a Demo" (linking to /demo) to "Start Free Trial" (linking to /signup), you need to update both the text and the URL. Run two passes — one for the link text, one for the href value.
Document the change. Keep a record of what you changed, when, and why. If conversion rates drop after the update, you'll want to be able to revert. A tool with an audit trail makes this automatic, but even a simple spreadsheet entry helps.
A note on HubSpot's newer CTA feature
HubSpot's newer CTA tool (still in beta as of early 2026) aims to improve on the legacy CTA system by making CTAs more flexible and trackable. If you're building new content, it's worth adopting the new system and using embedded CTAs where possible. This gives you the ability to update CTA text globally without touching individual pages.
But for existing content that already has hardcoded CTA text — which is the reality for most established HubSpot sites — bulk find-and-replace remains the fastest path to getting everything updated consistently.
Wrapping up
Updating CTA text across a HubSpot site is one of those tasks that sounds simple until you realize how many pages are affected. The key is to avoid the page-by-page approach whenever possible. Centralize your CTAs going forward using global modules or HubSpot's new CTA feature, and use bulk editing tools to handle the existing content. Your future self will thank you.
Keep working through the cleanup
Related HubSpot guides for planning, previewing, and validating the next step.
How to Bulk Edit Blog Posts in HubSpot CMS
Update URLs, branding, author names, and content across multiple HubSpot blog posts at once. No more editing posts one by one in the CMS editor.
Read guideHow to Bulk Edit Landing Pages in HubSpot
Update branding, URLs, CTAs, and content across multiple HubSpot landing pages at once. Stop editing pages one by one after a rebrand or domain change.
Read guideHow to Find and Replace in HubSpot Blog Posts
HubSpot's CMS doesn't have a built-in find-and-replace for blog content. Here's how to update text, links, CTAs, and branding across your entire blog without editing each post manually.
Read guideHow to Fix Broken Links in HubSpot CMS
Broken links hurt your SEO and frustrate visitors. Learn how to find and fix dead links across your HubSpot blog posts, landing pages, and website pages efficiently.
Read guideStill editing HubSpot records one by one?
Start with 100 free applied records — no credit card required.