HubSpot Marketing Contact Cleanup

Reduce your monthly HubSpot bill by removing inactive contacts from marketing status.

What does this tool do?

HubSpot charges us based on how many contacts are marked as "Marketing." Many of those contacts are people who never opened our emails, have invalid email addresses, or are from Taiwan (not our target market). This tool finds those contacts and removes them from the billing list.

Don't worry — it's safe. If someone we removed later opens an email, replies, fills out a form, or contacts us in any way, the system will detect it and flag them for re-activation.

When should I run this?

Fully automatic: 1st of every month at 9:00 AM
Everything runs automatically — scan, cleanup, and email notification. You don't need to do anything. You'll receive a result email at service@watersonusa.com showing how many contacts were removed.

You can also run it manually anytime — for example, after importing a large batch of contacts, or before a billing cycle.

How to run the cleanup (step by step)

Open Google Sheet
Run the scan

In the Sheet, click the menu: HubSpot Cleanup → Run Scan Now. Wait 2–5 minutes. The scan will automatically find inactive contacts, flag them for downgrade, and trigger the HubSpot Workflow.

Check the Summary

Click the Summary tab at the bottom (e.g. Summary_2026-03-26). You'll see how many contacts were processed and the estimated count after cleanup.

Check your email

A summary email will be sent to service@watersonusa.com showing: total contacts scanned, how many were downgraded, how many remain as marketing, and any reactivated contacts.

Done! Changes take effect at next billing cycle

Everything is automatic — no extra buttons to click. The marketing status change will take effect at HubSpot's next billing renewal, not immediately.

What if a removed contact comes back?

The system automatically checks every month. If a non-marketing contact does any of the following within 90 days, they show up in the Reactivated tab:

To restore them: go to HubSpot Cleanup → Set Reactivated as Marketing.

What kind of contacts get removed?

A contact is removed from marketing if it matches any of these:

New contacts are protected: Anyone added in the last 30 days won't be removed — they need time to receive and open emails first.

How it works behind the scenes

HubSpot does not allow changing marketing status directly through its API. So we use a two-step approach with custom properties and HubSpot Workflows:

Downgrade flow (Non-Marketing)

Script sets property

The Apps Script sets "Request Non-Marketing" = Yes on each candidate contact via HubSpot batch API.

Workflow triggers automatically

HubSpot Workflow detects the property change → sets the contact as Non-Marketing → clears the property to avoid re-triggering.

Status changes at next billing cycle

HubSpot marks the contact as "non-marketing at next renewal." The actual billing change takes effect at the next billing cycle, not immediately.

Reactivation flow (Marketing)

Same mechanism in reverse: the script sets "Request Marketing" = Yes → Workflow sets contact as Marketing → clears the property.

HubSpot Workflows (do not delete!):
1. "Set Non-Marketing" — triggers when Request Non-Marketing = Yes
2. "Set Marketing" — triggers when Request Marketing = Yes
These workflows are essential for the cleanup system to work.

Common Questions

Will this delete contacts from HubSpot?
No. It only changes their status from Marketing to Non-Marketing. The contact record stays in HubSpot — we just stop paying for them.
Can we undo this?
Yes. You can manually set any contact back to Marketing in HubSpot, or use the Reactivated tab to restore contacts that have shown recent activity.
What about Chinese-speaking customers in the US?
If a Chinese-name contact gets removed but later opens an email or contacts us, the reactivation scan will catch them and they can be restored. They are not permanently excluded.
The scan seems stuck or takes too long?
The scan needs to check thousands of contacts through the HubSpot API, so 2–5 minutes is normal. If it takes more than 10 minutes, try refreshing the page and running again.

Quick Links

Open Cleanup Sheet

Apps Script Editor (for developers)