Create Provider From URL
Scrape a vendor-portal URL with the module-local Playwright provider scraper and persist a Provider in api-v1.
Overview
This flow documents the active api-v1 create-from-URL path for Service Marketplace. HTTP status is 202 on accept.
It is not a copy of Create Product From URL. Product ingest routes through shared-scraping, BrightData, and AgentQL. Provider ingest uses DeterministicProviderScraperAdapter → houzz.provider.scraper.ts (Playwright + stealth plugin + shared Playwright launch helpers). There is no nested provider-ingestion System because that shared scrape stack is not on this path.
HTTP
- Canonical:
POST /api/v1/service-marketplace/providers/from-url - Same router:
POST /api/v1/service-marketplace/contractors/from-url - Legacy:
POST /api/v1/labor-marketplace/contractor-from-urlandPOST /api/v1/service-marketplace/contractor-from-url
No OpenAPI operationId is registered for these routes yet.
Code References
apps/api-v1/src/modules/service-marketplace/core/application/use-cases/CreateProviderFromUrlUseCase.tsapps/api-v1/src/modules/service-marketplace/adapters/outbound/scraping/DeterministicProviderScraperAdapter.tsapps/api-v1/src/modules/service-marketplace/adapters/outbound/scraping/deterministic/provider/houzz.provider.scraper.tsapps/api-v1/src/modules/service-marketplace/adapters/inbound/cli/providerScraperCli.ts
Notes
skipPersistence runs scrape without requiring a provider id. Idempotency is an in-memory one-hour store, not a durable table.