tapp/laravel-hubspot
A Laravel integration for HubSpot that provides OAuth authentication, an API client, and convenient facades for managing contacts, companies, deals, and other CRM resources directly from your Laravel application.
Architecture fit
tapp/laravel-hubspot is a thin Laravel convenience layer over HubSpot's official hubspot/hubspot-api-php SDK. Its value proposition is packaging, not capability: a service provider, a facade, a publishable config file, and DI-friendly access to HubSpot API clients. That is the right shape for a Laravel codebase that wants HubSpot::contacts()->create(...) instead of new Factory(...) boilerplate in every service.
It is not an integration platform. There is no sync engine, no webhook handling, no retry/queue layer, no model mapping, no property management. Anyone expecting "Laravel + HubSpot, solved" will be disappointed. Position it internally as syntactic sugar over the official SDK — which is fine, but it sets the correct expectation with stakeholders and reviewers.
Integration feasibility
Low friction on paper: composer require tapp/laravel-hubspot, publish config, supply credentials, resolve the facade or inject the client. The blast radius is small because the abstraction is shallow — you can read the entire package source in an afternoon. There is no database migration, no middleware, no route registration to reason about.
The genuine feasibility work is on the HubSpot side, not the Laravel side: which auth model is supported (private-app access token vs. OAuth with refresh), which API surfaces are actually wrapped (CRM v3 objects, associations, engagements, forms, marketing events), and whether errors surface as exceptions or as SDK response objects the caller must inspect. Those answers determine whether the package is usable for your use case at all.
Technical risk
Key questions to resolve before committing
composer.json constraints for PHP, Laravel, and hubspot/hubspot-api-php? Do they overlap with your locked versions?Retry-After respected anywhere?Stack fit
Good fit for Laravel 8–11 applications on PHP 8.x that already use the service container idiomatically and need a handful of HubSpot calls — form submissions to contacts, deal creation from a checkout event, contact lookup for support tooling. Poor fit if you need bidirectional CRM sync, high-volume batch ingestion, or property-schema management; those want a dedicated integration service or a direct build on the official SDK plus your own orchestration.
Migration path
Given the adoption signals, the correct pattern is wrap the wrapper:
App\Contracts\HubSpot\Contacts, ...\Deals — expressed in your domain terms, not SDK terms.Tapp\HubSpot.This costs perhaps a day and converts an unquantified dependency risk into a one-file swap. It also gives you a clean seam to fall back to the official SDK directly, or to HTTP via Laravel's Http facade, without touching call sites. Given zero dependents and a single maintainer, this is not optional rigor — it is the only responsible way to adopt.
Compatibility
Pin the package and the underlying hubspot/hubspot-api-php version together and treat them as one unit; do not let composer update float either independently. Verify against your exact PHP minor and Laravel minor, not the declared ranges. Run composer why-not against your lock file early to surface Guzzle/PSR-7 conflicts before they become a blocker mid-sprint.
Sequencing
Do not sequence this as "adopt the package, then build features." Sequence it as "prove this one call, then earn the right to the next."
Maintenance
Assume you will maintain this. The realistic outcomes are: the package keeps working and you upgrade occasionally; or it stalls on an old SDK major and you fork it; or you abandon it. All three are survivable because the surface area is small — a fork is a few hundred lines, not a codebase. Budget explicitly for an annual review of the package + SDK + HubSpot API changelog, and record the fork decision in an ADR so the next engineer understands the trade.
Support
No commercial backing, no SLA, no vendor to escalate to. Your real support channels are the official SDK's issue tracker and HubSpot's developer changelog. If your organization requires vendor support for revenue-path dependencies, this package does not qualify — which is itself a scoping decision that should be made explicitly rather than discovered during an incident.
Scaling
The package does nothing to help here, and that is the most important operational statement in this assessment. HubSpot enforces per-account API limits, per-second burst limits, and daily caps; it returns 429 with Retry-After. A facade over the SDK will happily let you fire one call per HTTP request and blow through limits under load. You must supply:
Redis/database driver and backoff/retryUntil configured.RateLimiter::for('hubspot')) applied per portal, not per worker.None of this comes from the package. All of it is yours.
Failure modes to instrument
composer update. Pin and gate upgrades behind CI.Ramp-up
For a competent Laravel engineer, reading and understanding this package is half a day — it is a thin wrapper and the source is small. The real ramp-up is HubSpot domain literacy: the object/association model, custom property definitions, sandbox vs. production portals, private-app scoping, and rate-limit economics. Budget one to two weeks for a developer to become genuinely productive, with the majority of that spent on HubSpot's docs and portal, not on this package. Document the auth model, rate-limit strategy, and property dependencies in your own repo — the package's README will not carry that knowledge for you.
How can I help you explore Laravel packages today?