MCP (ChatGPT / Claude) · Cosmetics contract manufacturer
Cosmetics contract manufacturer → indie beauty brands in France: what one real Prosp run returned
- Run date
- Job duration
- 14 min 13 s
- Results came from
- Live web search
- Delivered
- 8 of 8 requested
- Rejected candidates
- 60
TL;DR
- Delivered 8 of 8 in 14 min 13 s, from a live web search that screened 115 candidates.
- Registry-verified: 2 of 8. Both SIREN numbers matched the French company register on name, seat and active status, each lookup under a second.
- Went wrong: Nuxe is a large, established brand, not an indie one, and Avril came back as medium-sized (100 employees, estimated) under a micro/small request.
- The most frequent rejection reason was icp_intent_mismatch, with 15 candidates.
The scenario
A cosmetics contract manufacturer wants small, independent French beauty and skincare brands that could outsource production to it. The buyer is a profile we set up to test this market, not a customer. The run is real, and every company on this page came back from it.
- Buyer
- A manufacturer that formulates and fills skincare and cosmetics for other brands. An illustrative profile, not a named customer.
- Target
- Micro and small independent beauty and skincare brands in France.
The exact request
Sent by an AI agent through the MCP server as the tool call
find_prospects with these arguments:
{
"criteria": {
"query": "Find French independent beauty and skincare brands that could outsource product manufacturing to a cosmetics contract manufacturer",
"industries": [
"cosmetics_beauty"
],
"locations": [
"France"
],
"company_sizes": [
"micro",
"small"
],
"keywords": [
"indie brand",
"skincare",
"clean beauty",
"marque"
],
"maxResults": 8
}
}
How this run was actually started: through Prosp's internal job endpoint, with exactly these criteria and a target of 8 companies, under an internal exploration account whose results never reach a CRM. That path does not charge credits. Through MCP, an agent sends these arguments to find_prospects, then calls get_discovery_status and get_discovery_results with the job id it gets back.
What came back
| name | domain | city | country | industry | business_model | company_size | employee_count | employee_count_source | registry_source |
|---|---|---|---|---|---|---|---|---|---|
| Avril | avril-beaute.fr | Bondues | France | cosmetics_beauty | retailer | MEDIUM | 100 | unverified_estimate | — |
| Patyka | patyka.com | Paris | France | cosmetics_beauty | manufacturer | SMALL | 35 | unverified_estimate | — |
| VELAVI COSMETICS | velavi.fr | Saint Pal de Mons | France | cosmetics_beauty | manufacturer | MICRO | 2 | unverified_estimate | — |
| Nuxe | nuxe.com | Paris | France | cosmetics_beauty | manufacturer | — | — | — | — |
| Oolution | oolution.com | Bordeaux | France | cosmetics_beauty | manufacturer | SMALL | 15 | unverified_estimate | — |
| Les Huilettes | leshuilettes.com | Suresnes | France | cosmetics_beauty | manufacturer | SMALL | 15 | unverified_estimate | — |
| MATIERE BRUTE LAB | matierebrutelab.com | PARIS | France | cosmetics_beauty | retailer | MICRO | 3 | official_registry | recherche-entreprises.api.gouv.fr |
| BIVOUAK OPERATIONS | bivouak-paris.com | Annecy | France | cosmetics_beauty | manufacturer | MICRO | 10 | unverified_estimate | recherche-entreprises.api.gouv.fr |
Checking the registry ids
| domain | register | id delivered | result | what we compared |
|---|---|---|---|---|
| matierebrutelab.com | recherche-entreprises.api.gouv.fr (SIRENE) | 821004504 | verified | Register name 'MATIERE BRUTE LAB', seat Paris, active, activity code 20.42Z (perfumes and toiletries manufacturing). Lookup under 1 s. |
| bivouak-paris.com | recherche-entreprises.api.gouv.fr (SIRENE) | 103515011 | verified | Register name 'BIVOUAK OPERATIONS', seat Annecy, active, activity code 47.91B (mail-order and online retail). Lookup under 1 s. |
Why candidates were rejected
| Reason | Count | Share |
|---|---|---|
icp_intent_mismatch | 15 | |
content_thin | 8 | |
industry_not_in_target_precrawl | 5 | |
parked_domain | 4 | |
phantom_company | 4 | |
country_not_in_target | 3 | |
country_not_in_target_precrawl | 3 | |
content_article | 2 | |
content_unknown | 2 | |
industry_hard_floor:off_taxonomy | 2 | |
classifier_verdict_unconfirmed | 1 | |
competitor_match | 1 | |
crawl_unreachable_host | 1 | |
directory_aggregator | 1 | |
dns_nxdomain | 1 | |
enterprise_too_large | 1 | |
foreign_origin | 1 | |
hallucination_detected | 1 | |
industry_mismatch | 1 | |
page_archetype_listing | 1 | |
quality_penalty:company_name_repeated | 1 | |
tld_conflict_rejected | 1 |
What went wrong
- Nuxe is a large, established French brand, not an indie one. Its company_size is empty, so the micro/small preference could not exclude it.
- Avril came back as medium-sized (100 employees, a language-model estimate) under a micro/small request. Company size is a preference, not a hard filter.
- 6 of 8 rows have no registry id. For Les Huilettes the register match was not confirmed; for the other five the lookup found nothing.
How to read this run
This was the slowest of the six runs in this series. icp_intent_mismatch (15) leads the
rejection histogram, ahead of content_thin (8). No candidates were discarded after the target
was reached.
Six of the eight are the kind of company the request described: small French skincare brands selling under their own name (Patyka, VELAVI COSMETICS, Oolution, Les Huilettes, MATIERE BRUTE LAB, BIVOUAK). MATIERE BRUTE LAB is registered under a perfume and toiletries manufacturing code, and its employee count (3) comes from the register. Nuxe and Avril are the exceptions, covered under "What went wrong".
What this market can and can't verify
- Registers: yes, free and fast. France's SIRENE company register can be searched through the public recherche-entreprises.api.gouv.fr service. On 2026-10-03 we looked up both SIREN numbers Prosp delivered. Both matched on name and seat and were active. Each lookup took under a second; the links in the table above run the same search.
- Gaps: six rows came back without a SIREN. That is the larger problem in this market: a check that takes a second is only useful on the rows that carry an id.
Cost and time
- The job took 14 min 13 s. At submission the API estimated a median of 565 s and a 90th percentile of 1,686 s.
- A discovery costs 100 credits through the REST API, the MCP server or the Telegram bot. This run was started on an internal account and was not charged.
How to reproduce this run
- ChatGPT or Claude: connect the MCP server and ask your assistant for the same
companies, or have it call
find_prospectswith the arguments above. - REST API: send the same criteria to
POST /api/v1/discoveries. See the API reference. - Telegram: run
/findin the bot. See the Telegram guide.
A repeat will not return exactly these eight. The web changes, and each run adds to Prosp's knowledge base, so a later run may be served partly from companies found by earlier ones.
Run your own
Describe the companies you want to reach and get the same output: the companies, the rejection histogram and the registry ids to check them against.
Start in Telegram Get API credentials Read the API reference
A discovery costs 100 credits, bought in the Telegram bot with Telegram Stars. Pricing, payment and API keys walks you from the first message to your first run, step by step.