philippe2463/recherche-entreprises-bundle
A Symfony bundle that integrates the French Recherche d'entreprises API, letting you search companies by name, SIREN/SIRET, or location and retrieve structured business data directly in your PHP applications.
Architecture fit — framework mismatch is the headline. Despite the Laravel-shaped framing of this assessment series, philippe2463/recherche-entreprises-bundle is a Symfony bundle, not a Laravel package. For a Laravel shop the adoption question is effectively answered: there is no ServiceProvider, no auto-discovery, no facade contract, and no illuminate/* constraint to satisfy. The only transferable value is the source code as a reference implementation of an API client — endpoint paths, query parameters, pagination semantics — which the MIT license permits us to copy. For a Symfony shop the fit is conventional: a container-registered service wrapping symfony/http-client, sitting in the infrastructure layer as a read-only adapter to an external data source.
What product capability it actually unlocks. The package is a thin client over the French government's Recherche d'entreprises API, exposing lookup by name, SIREN, or SIRET with pagination and configurable client settings. In product terms that is a lookup primitive, not a compliance product. It plausibly supports:
It explicitly does not provide SIREN Luhn validation, legal-form normalisation, director/beneficiary data, financial statements, change monitoring, or any assurance layer. Any roadmap item promising "verified business identity" needs those built on top; the package shortens the first mile only.
Integration feasibility. High on technical surface area (small, framework-native, no published migrations or assets implied), low on verifiability. We have no composer.json, no changelog, no release notes, no stated Symfony/PHP version range, and no evidence of a test suite or CI. Feasibility should be treated as unproven, not "likely fine because it's small."
Technical risk.
Key questions.
composer.json constraints for php, symfony/framework-bundle, and symfony/http-client, and do they intersect our runtime and our next upgrade target?Stack fit. Symfony 6/7 with symfony/http-client and PHP 8.1+ is the likely target and must be confirmed from composer.json, not the README. For a Laravel application: do not attempt to install it. Use Laravel's Http facade with a ~100-line client informed by the bundle's source, or wrap the API behind an interface we own. This is the cheaper and lower-risk path by a wide margin and should be the default recommendation unless the team is already on Symfony.
Migration path. Greenfield — nothing is installed. There is no migration, only an adoption decision. Run it as a two-track evaluation: (a) prove the API works for the roadmap item using a throwaway client, and (b) prove the bundle works using a timeboxed spike. If (a) succeeds and (b) fails, we still have a shippable feature and a reference implementation.
Compatibility. Verify against the exact Symfony and PHP patch versions we run, not just the major. Confirm whether the bundle auto-registers via config/bundles.php conventions or requires manual registration, and whether it publishes config. Do not call bundle classes directly from controllers or domain services — put our own CompanyLookup interface in front of it and let the implementation be swappable.
Sequencing.
composer.json, service class inspection, test/CI status, license of both code (MIT) and data (Etalab), GDPR read on any officer data surfaced.APP_ENV=local guard; assert behaviour, not just container resolution.Maintenance. Assume we own the upgrade burden regardless of path. At 0.x with no changelog, breaking-release cadence is unknowable; budget a recurring line item for tracking and re-validation and add the repo to Dependabot/Renovate from day one. The larger maintenance surface, however, is the API contract and data model, which we own either way — plan for annual review of field semantics as the government dataset evolves.
Support. Two support relationships exist: the package maintainer (weak signal — single maintainer, thin docs, no visible triage) and the upstream public API (no commercial support, best-effort availability, community-known rate limits). The second matters more. Determine our acceptable outage behaviour before shipping: an onboarding flow that hard-blocks on this API converts a government-side incident into our own support queue.
Scaling. The load profile is dominated by external latency, not package overhead. Design accordingly: cache aggressively (company registry data changes slowly — 24h to 7d TTL is defensible; invalidate on write paths only), enforce a per-tenant rate limit, and never fan out N lookups inside a single request or job without bounding concurrency. If lookups sit in the signup path, they multiply across every new account; if in a queue, they scale with worker count and become a throughput lever.
Failure modes.
Ramp-up. Low. A competent Symfony engineer absorbs the package in an afternoon; the real ramp is domain literacy — SIREN vs. SIRET, Luhn validation, legal categories, and the fuzzy-match trap — which the package does nothing to teach. Budget a short internal write-up plus one demo so the constraint (use behind the interface; treat results as candidates, not facts) outlives the engineer who ran the spike.
Recommendation. Do not adopt the package as a dependency; do mine it as a reference implementation. Zero stars, zero dependents, a single maintainer, no changelog, and a framework mismatch with our stack mean the wrapper saves days while adding a permanent 0.x dependency with unverifiable upgrade cost — a poor trade. The underlying API is worth adopting for the lookup use cases above; build a thin, tested client behind our own interface, cache it, and treat every result as a candidate requiring SIREN-level confirmation. Re-evaluate the bundle only if we move to Symfony, the project reaches 1.0 with a changelog and CI, or it acquires verifiable dependents.
How can I help you explore Laravel packages today?