suppress-ghost-contacts

Identify and suppress unengaged HubSpot contacts via API and CSV audits.

58|16|Updated Mar 26, 2026
One-click install
npx skills add https://github.com/TomGranot/hubspot-admin-skills --skill suppress-ghost-contacts
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: suppress-ghost-contacts
Source: https://github.com/TomGranot/hubspot-admin-skills/tree/main/skills/suppress-ghost-contacts
Command: npx skills add https://github.com/TomGranot/hubspot-admin-skills --skill suppress-ghost-contacts

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires requests>=2.31, python-dotenv>=1.0, and includes scripts (resource) components.

What problem does it solve?

Ghost contacts who have received marketing emails but never opened any threaten sender reputation and email deliverability. This Skill helps identify and suppress those unengaged contacts in a controlled, auditable way.

Core Features & Use Cases

  • API-driven discovery of ghost contacts (delivered > 0, opened = null, bounced = null) and before/after state verification.
  • CSV export for audit trails and segmentation, plus dynamic HubSpot lists to drive suppression workflows.
  • Hybrid suppression workflow: leverage API-based discovery and a manual HubSpot UI action to set marketing contact status without deleting CRM data.

Quick Start

Run the before.py script to audit ghost contacts, then run the after.py script to verify suppression, and finally use HubSpot UI to set contacts in the CLEANUP: Ghost Contacts list to non-marketing.

Frequently Asked Questions about suppress-ghost-contacts

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I identify and suppress ghost contacts in HubSpot to protect email deliverability?

To suppress ghost contacts for email deliverability, identify contacts with delivered emails but zero opens using HubSpot Contacts Search API, export a CSV for auditing, create a dynamic list, and manually set their marketing status to non-marketing via the UI.

What is a ghost contact in HubSpot and why does it hurt sender reputation?

A ghost contact in HubSpot is a record that has received marketing emails but never opened any, with null bounce data. Suppressing these unengaged contacts protects sender reputation by removing unresponsive recipients from future sends.

How do I find HubSpot contacts who never opened an email using the API?

To find HubSpot contacts who never opened an email via the API, query the Contacts Search endpoint using the NOT_HAS_PROPERTY filter for the email open property, ensuring you target records with delivered emails greater than zero and no bounces.

Can I use a Python script to audit unengaged contacts before suppressing them in HubSpot?

Yes, you can use a Python script with the requests library to audit unengaged contacts before suppressing them. The script queries the HubSpot API to verify the before state, exports a CSV audit trail, and checks the after state post-suppression.

Does suppressing ghost contacts in HubSpot delete my CRM data?

Suppressing ghost contacts in HubSpot does not delete CRM data. The hybrid workflow uses API-based discovery and a manual UI action to set marketing contact status to non-marketing, preserving the records while excluding them from future email sends.

What is the best way to maintain an ongoing cleanup of unengaged HubSpot contacts?

The best way to maintain ongoing cleanup of unengaged HubSpot contacts is creating a dynamic list named CLEANUP: Ghost Contacts. This list continuously filters records matching the NOT_HAS_PROPERTY criteria, driving ongoing suppression workflows without deleting CRM data.