wearescytale/companies-house-bundle
Symfony bundle for integrating the UK Companies House API into PHP applications. Provides configuration and services to search companies and retrieve profiles, officers, and filing data, reducing boilerplate around authentication and API responses. Useful for lookup and due-diligence features.
Architecture fit. The package is a Symfony bundle, not a Laravel package, and that distinction drives most of the assessment. Symfony bundles rely on bundle registration in config/bundles.php, a DependencyInjection/*Extension class, service definitions in YAML/XML, and a Configuration tree for semantic config. Laravel has no bundle loader, no compiler passes, and a materially different container and config model. The bundle's value — pre-wired services, autoconfiguration, tagged services — is therefore not portable as-is. What is actually reusable is the thin domain logic that maps Companies House REST endpoints (company profile, registered office, officers, persons with significant control, filing history, search, document metadata) to PHP value objects.
Integration feasibility. Composer will install it into a Laravel project, but nothing will register the services automatically. Even after manual wiring, the bundle will likely pull in Symfony components (http-client, serializer, event-dispatcher, config) that duplicate or conflict with Laravel's equivalents. Feasibility is rated low for direct adoption and moderate for a targeted salvage: read the source, extract the endpoint paths, request shapes, and response mapping, then reimplement against Laravel's HTTP client. That is a days-scale effort for one engineer, not a weeks-scale one, but it produces a fork you own rather than a dependency you inherit.
Technical risk.
Key questions.
Stack fit. Poor as a direct dependency. The recommendation is to treat the repository as a reference implementation and specification source, not as a runtime dependency. The valuable artifact is the encoded knowledge of Companies House endpoint URLs, request parameters, and response field names — that knowledge is cheap to port and expensive to rediscover.
Migration path. Three viable routes, in ascending order of effort:
Illuminate\Support\Facades\Http behind a CompaniesHouseClient interface. Lowest total cost, cleanest result.Route 1 is the default recommendation; route 3 is the better answer if the integration is on a critical path or covers more than a handful of endpoints.
Compatibility. Before any decision, confirm the PHP constraint. A bundle written for Symfony 3 or 4 will typically declare PHP 7.x, which will not install alongside a modern Laravel runtime. Also check whether it depends on symfony/http-client (which Laravel does not use), symfony/serializer (overlapping with Laravel's casting), and any PSR-18/PSR-17 implementations that may collide. Conflicts here are a hard blocker, not a nuisance.
Sequencing.
NotFound, Unauthorized, RateLimited, UpstreamError). The bundle is now an implementation detail.Maintenance. The bundle transfers no maintenance obligation off your team — it adds one. Any bug, PHP upgrade, or API change requires patching a dependency with no upstream activity and no other consumers to share the cost. A small in-house client is fewer lines of code than the workaround layer a Symfony bundle in Laravel would require, and it belongs to the team that already owns the feature. Budget ongoing effort for API drift review: Companies House does evolve its schema, and an unmaintained library will not absorb those changes.
Support. There is no vendor, no support contract, and effectively no community. With two stars and zero dependents, the realistic support channel is reading the source. Factor that into on-call: anyone paged for a Companies House outage or a failed onboarding must be able to diagnose the integration without documentation. That argues strongly for owning the code.
Scaling. The binding constraint is the Companies House rate limit (roughly 600 requests per five minutes per API key) rather than CPU or memory. Design implications:
Failure modes. Enumerate and handle each explicitly, because the bundle likely collapses them:
Ramp-up. Low technical complexity, moderate context cost. The Companies House domain model — company numbers, officer roles, PSC natures of control, filing types — carries more learning burden than the HTTP integration itself. The bundle's source is a reasonable onboarding artifact for that vocabulary even if it is never installed. Plan for half a day of domain reading plus the spike; a competent Laravel engineer can deliver the replacement client within a sprint. The larger cost is social: someone must be nominated as owner of the integration and the decision record, or the fork will quietly rot in the same way the original did.
How can I help you explore Laravel packages today?