Product Decisions This Supports
Feature / roadmap decisions
- Crawl-and-extract as a capability, not a product. This package is scaffolding for scheduled, queued web extraction (item pipelines, middlewares, retry/backoff, concurrency limits). It supports roadmap decisions like "do we offer competitor price tracking / catalog ingestion / listing aggregation as a feature?" — not decisions about the crawler itself.
- Queue-based ingestion architecture. Roach's model (scheduler → requests → responses → item pipelines, backed by a queue driver) is the pattern to standardize on if ingestion is expected to grow past a few hundred pages/day. Use it to justify investing in queue workers, dead-letter handling, and per-domain rate limiting before you need them.
- Data-freshness SLAs. Because jobs are schedulable and resumable, this framing lets you commit to "prices refreshed every 6h" style promises rather than "we scrape when someone remembers to run the script."
Build vs. buy
- The bundle itself: do not buy. It is Symfony-specific, last released 2022-10, 10 stars, 0 dependents, and no Laravel service provider. For a Laravel codebase the integration work is net-new regardless, so the bundle buys you ~nothing over the core.
- The core (
roach-php/core): a genuine candidate. It is framework-agnostic and covers the hard parts (middleware pipeline, retries, concurrency, item pipelines) that you would otherwise hand-roll around Guzzle + symfony/dom-crawler. Adopting the core is ~1–3 dev-days of Laravel wiring (service provider, config publish, queue connection, failure handling); hand-rolling equivalent middleware is closer to 2–4 weeks and is permanently yours to maintain.
- The real build-vs-buy axis is elsewhere: self-hosted Roach core vs. managed extraction (Apify, Zyte, Bright Data, ScrapingBee). Decide on anti-bot evasion and legal exposure, not on PHP ergonomics. If target sites are aggressively defended, managed wins on total cost; if they are static/structured, self-hosted wins by an order of magnitude on per-page cost.
Use cases worth scoring against your roadmap
- Price and availability monitoring across a defined competitor set.
- Catalog / SKU ingestion and deduplication into your own search index.
- Content migration and legacy-site harvesting during replatforming.
- SEO and broken-link audits as an internal tool.
- Lead/listing enrichment from directories and marketplaces.
- Job-board or real-estate aggregation feeds.
Opportunity signal (score 5.16)
- Low score with a real gap behind it: there is no mature, Laravel-native scraping orchestration package. Treat this as an internal-contribution opportunity — a thin
laravel-roach package (service provider + config + queue + artisan crawl command) is small, differentiating, and removes the vendor-risk objection for every future crawler feature. Alternatively, treat it as a known ecosystem gap and budget for the wiring in each project's estimate rather than assuming it exists.
When to Consider This Package
Consider the core library (not necessarily this bundle) when:
- You are on PHP 8.x and already run Laravel/Symfony queues; Roach reuses that infrastructure instead of introducing a new worker runtime.
- You need more than a one-off script but less than a scraping platform: multi-step crawl with pagination, retries with backoff, per-request middlewares (user-agent rotation, throttling, proxy selection), and typed item pipelines.
- Target sites are static or lightly protected and change infrequently; your volume is in the thousands-to-low-millions of pages per month.
- You want extraction logic in the same language, repo, test suite, and deploy pipeline as the rest of the application — a real advantage over bolting on a Python/Node scraper or a third-party SaaS.
- You need auditability: extraction rules in version control, reviewable by legal/compliance.
Consider this specific bundle only when:
- You are on Symfony with autowiring and want the Roach services registered for you. That is the entire value proposition — and it is worth roughly one service provider.
Look elsewhere / do not adopt when:
- You are on Laravel. The bundle is Symfony-only and unmaintained (last release Oct 2022). Use
roach-php/core directly with your own service provider, or pick a Laravel-native crawler.
- Maintenance risk is unacceptable. 10 stars, 0 dependents, no release in ~3 years. There is no community to absorb a breaking PHP or Symfony upgrade. You would be the maintainer in practice — acceptable for a small, vendored, well-tested dependency; not acceptable as a load-bearing platform component.
- The targets are defended (Cloudflare/Akamai/DataDome, behavioral fingerprinting, JS-rendered SPAs). Roach is an HTTP crawler; you will need a headless browser (Laravel Dusk / Panther / Playwright sidecar) or a managed unblocking provider. Do not let the library choice hide this cost.
- You need scale beyond a single-region queue, distributed politeness controls, or proxy pool management as a service — that is a platform, and open-source PHP crawlers do not give it to you.
- Legal/ToS exposure is unresolved. No library solves this; escalate it as a decision, not a tech choice.
Mitigation if you do adopt: pin the version, vendor/fork it, wrap it behind your own Crawler interface so the engine is swappable, and add a contract test suite that fails loudly on PHP/Symfony upgrades. Budget ~1 day/quarter of maintenance.
How to Pitch It (Stakeholders)
For executives — one paragraph
Web extraction is a small, high-leverage capability that unblocks price monitoring, catalog ingestion, and competitive intelligence without a data vendor contract. The PHP option we evaluated (roach-php/core, with a thin Symfony bundle around it) is MIT-licensed and covers the operationally hard parts — queuing, retries, throttling, structured output — so it reuses the queue and deployment infrastructure we already run. Cost is low (an estimated 1–3 engineering days of integration, not weeks of custom scraper code) and it keeps the logic in our own repository, under our tests and review. The trade-off is maintenance: the wrapper we looked at has been dormant since October 2022 and has essentially no user base, so we should adopt the core library only, isolate it behind our own interface, and accept roughly one day per quarter of upkeep. It is a build-versus-buy decision worth making once, at the platform level, rather than per project.
For engineering — the summary
- Adopt
roach-php/core as the crawling engine; do not adopt nelexa/roach-php-bundle (Symfony-only, unmaintained, 10 stars, 0 dependents). We write the ~1–3 day Laravel service provider ourselves.
- Rationale: middleware pipeline, request scheduling, retries/backoff, and item pipelines are the parts that are expensive and boring to rebuild. Our value-add is in extraction rules and the domain layer, not in request orchestration.
- Guardrails: wrap it behind an internal
Crawler/Extractor interface so it stays replaceable; pin the version; add upgrade-contract tests; route all politeness (rate limits, robots.txt, user-agent) through one middleware we own.
- Explicit non-goals: JS-heavy rendering and anti-bot evasion. If the roadmap requires those, the decision reverts to managed extraction (Apify/Zyte/Bright Data) with a per-page cost model — raise it before committing to a scraping-backed feature.
- Follow-on opportunity: a small internal Laravel package (
laravel-roach) closes a real ecosystem gap, pays for itself on the second crawler feature, and can be open-sourced for hiring/visibility if it stabilizes.