HubSpot Solutions Partner Directory and RevOps Agency Scraper avatar

HubSpot Solutions Partner Directory and RevOps Agency Scraper

Pricing

from $2.10 / 1,000 agencies

Go to Apify Store
HubSpot Solutions Partner Directory and RevOps Agency Scraper

HubSpot Solutions Partner Directory and RevOps Agency Scraper

Extract accredited HubSpot Solutions Partner agencies from the official HubSpot Ecosystem Marketplace Solutions Directory, with partner tier, rating and review count, certification count, catalog services, industries, budget range, office locations (city, state, country) and agency website URL.

Pricing

from $2.10 / 1,000 agencies

Rating

0.0

(0)

Developer

Groundplane Labs

Groundplane Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Security

Limited permissions

Share

HubSpot Solutions Partner Directory & RevOps Agency Scraper

Extract accredited HubSpot Solutions Partner agencies from the official HubSpot Ecosystem Marketplace Solutions Directory, including partner tier (Elite, Diamond, Platinum, Gold), verified client rating, review count, HubSpot Academy certification count, catalog services provided, industries served, client budget range, office locations, and agency website URL.

What it does

  • Queries the official HubSpot Ecosystem Marketplace directory (PersonalizationPublicRpc/search) with server-side filters for Partner Tier, Catalog Services, and Country, reconciling delivered results against the directory's reported total.
  • Filters candidate partner agencies by Minimum Verified Reviews Count and Minimum Average Rating.
  • Enriches each qualifying agency via MarketplaceListingDetailsRpc/getListingDetailsV3 at a polite rate limit ($\le 3\text{ requests/second}$) to extract full HubSpot Academy credentials, catalog services, industry specializations, minimum budget ranges, physical and remote office locations, and external website URLs.
  • Emits agencyPhone and agencyContactEmail only when published directly on the HubSpot directory profile itself; never crawls external websites.

Who it's for

  • B2B SaaS Channel & Ecosystem Teams recruiting certified HubSpot implementation and RevOps agencies for co-selling and referral partnerships.
  • Enterprise Procurement & RevOps Buyers benchmarking HubSpot Elite and Diamond implementation partners by service capability, verified review volume, and budget tier.
  • Market Researchers analyzing regional distribution, certification density, and industry focus across the HubSpot Solutions Partner ecosystem.

Input

FieldTypeDefaultDescription
partnerTiersstring[]["Elite", "Diamond", "Platinum", "Gold"]Partner tiers to include. Empty means all tiers.
servicesOfferedstring[]["CRM Implementation", "Inbound Marketing", "Custom API Integrations", "RevOps"]HubSpot catalog service names. Empty means all services.
countriesstring[]["United States", "United Kingdom", "Canada", "Australia"]Full country names or ISO-2 codes. Empty means all countries.
minReviewsCountinteger5Keep only agencies with at least this many verified client reviews.
minRatingnumber4.5Keep only agencies with at least this average client rating (0.0 to 5.0).
maxItemsinteger1500Maximum agency profiles to return.

Note on RevOps: HubSpot's live service catalog has no RevOps service. In this actor, RevOps maps to Revenue Hub Implementation OR Sales and Marketing Alignment.

Example input (with default spending protection "maxTotalChargeUsd": 50 in run options). Note: the maxItems value of 150 in this example is non-default; the schema default is 1500:

{
"partnerTiers": ["Elite", "Diamond", "Platinum", "Gold"],
"servicesOffered": [
"CRM Implementation",
"Inbound Marketing",
"Custom API Integrations",
"RevOps"
],
"countries": [
"United States",
"United Kingdom",
"Canada",
"Australia"
],
"minReviewsCount": 5,
"minRating": 4.5,
"maxItems": 150
}

Recommended Apify run options set a default maximum charge of $50 ("maxTotalChargeUsd": 50).

Output

FieldTypeDescription
partnerIdstringUnique HubSpot Solutions Partner profile ID
agencyNamestringAgency display name on the HubSpot Solutions Directory
partnerTierstring|nullPartner tier (Elite, Diamond, Platinum, Gold)
averageRatingnumber|nullAverage client rating (0.0 to 5.0)
reviewsCountintegerCount of verified client reviews
certificationsCountintegerCount of HubSpot Academy certifications and accreditations
servicesProvidedstring[]Catalog services offered by the agency
industriesServedstring[]Target industries served by the agency
budgetMinimumRangestring|nullSupported client budget range ($0 - 2,500, $2,500 - 5,000, $5,000+, Any budget)
officeLocationsstring[]Office locations as city, state, country only. Street addresses and ZIP codes from the source payload are never emitted.
agencyWebsiteUrlstring|nullExternal website URL of the agency
agencyPhonestring|nullPublished agency phone number on the HubSpot profile, if present
agencyContactEmailstring|nullPublished agency inquiry email on the HubSpot profile, if present
hubspotDirectoryUrlstringDirect URL to the HubSpot Solutions Partner profile

Sample output row (synthetic example)

{
"partnerId": "284910",
"agencyName": "RevOps Growth Partners",
"partnerTier": "Diamond",
"averageRating": 4.9,
"reviewsCount": 84,
"certificationsCount": 42,
"servicesProvided": [
"CRM Implementation",
"Custom API Integrations",
"Programmable Automation"
],
"industriesServed": [
"Technology - software",
"Banking/financial services",
"Manufacturing"
],
"budgetMinimumRange": "$5,000+",
"officeLocations": [
"Austin, TX, USA",
"London, United Kingdom"
],
"agencyWebsiteUrl": "https://www.revopsgrowth.example.com",
"agencyPhone": null,
"agencyContactEmail": null,
"hubspotDirectoryUrl": "https://ecosystem.hubspot.com/marketplace/solutions/revops-growth"
}

How pricing works

Pay per result. You only pay for rows returned.

Data source and terms

Compliance

All business directory attributes are published on the public HubSpot Solutions Directory. Users are solely responsible for complying with the Telephone Consumer Protection Act (TCPA), the National Do-Not-Call Registry, the CAN-SPAM Act, GDPR, CCPA, and all applicable federal, state, and international privacy and outreach regulations before initiating any business communication. Not for consumer or individual targeting.

Limits and FAQ

  • Rate limiting: Requests are throttled to $\le 3\text{ requests/second}$ with automatic exponential-backoff retries to respect HubSpot's storefront gateway.
  • Phone and email availability: Most HubSpot Solutions Partner profiles route inquiries through an embedded HubSpot form rather than displaying a raw phone number or email address; agencyPhone and agencyContactEmail are populated only when explicitly published on the directory profile itself and are null otherwise.
  • Found a problem or need a field? Open an issue on the Issues tab; we respond quickly.

Canary input (labeled)

{
"partnerTiers": ["Elite"],
"servicesOffered": ["CRM Implementation"],
"countries": ["United States"],
"minReviewsCount": 50,
"minRating": 4.8,
"maxItems": 5
}

Expected: 5 rows, Complete status, in under 30 seconds at review time.

Troubleshooting

  • Zero matches: a healthy source with no agencies passing your filters ends as Complete: 0 ... matched your filters. Lower minReviewsCount or minRating, or widen tiers, services, or countries.
  • PARTIAL status: the run hit a source problem (search, detail, schema, or value-format drift). The status states the counts and the reason. If this keeps happening, please open an issue on this actor's Issues tab and we'll fix it fast.
  • Caps: hitting maxItems or the charge cap stops the run early and the status says so; raise the limit to get more rows.
  • Phone and email are usually null: the HubSpot V3 detail payload reviewed on 2026-11-01 carries no phone or email keys at all, so both fields are null unless HubSpot starts publishing them on the directory profile itself. External websites are never crawled to fill them.

Data path note

This actor uses the HubSpot Chirp gateway (PersonalizationPublicRpc/search). The Chirp gateway is an undocumented internal storefront RPC, not a published HubSpot API: it is publicly reachable without a key, but HubSpot can change or remove it silently and without notice, and that silent-change risk stands for as long as the actor relies on it. It was confirmed live at build and review time. It does not use a server-rendered initial-state payload: the directory HTML served on 2026-11-01 contains no __NEXT_DATA__ payload (that name in the original draft was wrong) and no equivalent SSR partner payload, so the sentinel is pinned to the JSON gateway instead: the filter-config keys, the integer search total, the first-card shape (name, reviewSummary.reviewCount, products[].partnerTier, slug), and every V3 detail payload's core fields (tier, companyName, services, credentials, urlSlug), checked per row for presence and substance (non-empty text for tier, companyName and urlSlug; a list with substantive entries for services and credentials).

Changelog

  • v0.2.5 - The credential entry substance test is now anchored to identifying content: a credential entry in object form counts only when one of the credential schema's identifying keys (name, title, internalName, id) holds a non-empty name or a positive identifier. An entry carrying only ancillary values (an icon URL, a description, a topic, a type, a grantee entity, or any unrelated key) is hollow: it no longer produces a certificationsCount under a Complete status; an all-hollow credentials list skips the row as before, and a hollow entry in a mixed list is dropped and stated as unparsed drift. Bare numeric credential entries now count only when positive, matching the identifier rule used for profile ids.
  • v0.2.4 - The per-row core detail check now tests the substance of the entries inside the services and credentials lists, not only the container type: a services entry counts only when it yields a non-empty service name, and a credential entry counts only when it carries a name or an identifier. A list whose entries are all hollow now skips the row, counts toward the 20 percent skip rule, and ends the run PARTIAL with the reason stated and the Issues CTA, instead of shipping fabricated enrichment (including a positive certificationsCount counted from empty credential objects) under a Complete status. In a mixed list the row is kept with only the contributing entries counted, and the hollow entries are stated as unparsed fields in the status line. A non-positive profileId now falls back to the search card listingId instead of being emitted as a negative partnerId.
  • v0.2.3 - The per-row core detail check now tests substance, not only key presence: tier, companyName and urlSlug must be non-empty text (whitespace alone does not count), services must be a list, and credentials must be a list. A detail payload whose core fields are present but empty or null now skips that row, counts toward the 20 percent skip rule, and ends the run PARTIAL with the reason stated and the Issues CTA, instead of shipping a row built from the search card alone under a Complete status. The search card fallbacks for tier, companyName and urlSlug now apply only when the detail value is absent, so an empty or null detail value can no longer be masked by the card.
  • v0.2.2 - H1 closed in full: a detail response whose listing is an empty object now counts as a detail failure instead of a successful enrichment; a per-row core sentinel now checks every hydrated profile (tier, companyName, services, credentials, urlSlug) with no truthiness guard, so an empty or truncated detail payload skips that row, counts toward the 20 percent skip rule, and ends the run PARTIAL with the reason stated and the Issues CTA; an absent credentials key is now treated the same as an unparseable credentials value and the row is skipped instead of shipping certificationsCount 0. The terminal over-20-percent failure message now names all three skip categories: detail fetch, schema validation, and enrichment skips.
  • v0.2.1 - Rows whose detail enrichment failed or whose credentials value was unparseable are now skipped and counted toward the 20 percent skip rule instead of being emitted with fabricated 0/empty enrichment fields; an unrecognized partner tier value is now emitted as null instead of being capitalized through; the dataset-count reconciliation now logs a warning and ends the run PARTIAL on a mismatch instead of never firing; README now discloses the RevOps service mapping, lists input defaults (the example maxItems 150 is non-default; the schema default is 1500), shows agencyPhone and agencyContactEmail as null in the sample row, and states that the Chirp gateway is an undocumented internal storefront RPC; fixture suite extended to the CODING_RULES section 7 minimums.
  • v0.2 - Reconstructed the empty .actor files (actor, input, dataset, output schemas) from the spec; retry standard unified to 6 tries with jittered backoff (computed backoff 2 to 32 s; the actual sleep is half to the full computed value, so the first retry can sleep 1 s), 120 s cap, and Retry-After honored; zero matches now end Complete: 0 instead of failing; value-format drift is counted and stated as unparsed fields, never silent; skipped rows over 20 percent fail loudly; office locations emit city, state, country only (street addresses scrubbed); sentinel expanded to first search card and first V3 detail payload.
  • v0.1 - Initial release with HubSpot Chirp storefront search, total reconciliation, V3 profile enrichment, and schema validation.