# Vinted Pro · Email & Phone by Market (`corent1robert/vinted-pro-siret-company`) Actor

Get new Vinted Pro emails on a market. You choose how many, and which fields must be public. Email, phone, company — one row per shop. Optional company file on France (INSEE) and the UK (Companies House). Need titles and prices? Use Vinted · Listings by Search. No login.

- **URL**: https://apify.com/corent1robert/vinted-pro-siret-company.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Lead generation, E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 pro seller exporteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Vinted Pro · Email & Phone by Market

Get **new** public emails (and phones) from **Vinted Pro** shops. You pick **how many** this run, and which fields **must** already be public. The next run skips shops you already opened — so you get the **next** 50, not the same 50.

**No login. No Vinted account. C2C inboxes are not harvested.** Particular accounts are skipped and not billed.

Need titles, prices and photos first? Use **[Vinted · Listings by Search](https://apify.com/corent1robert/vinted-listings-pro-sellers)**.

### Same Vinted suite — pick the job

| Actor | Use when |
|-------|----------|
| [Vinted · Listings by Search](https://apify.com/corent1robert/vinted-listings-pro-sellers) | Titles, prices, photos |
| **This Actor — Email & Phone by Market** | New Pro contacts (+ optional company file) |

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| Outbound / SDR | 50 new public emails, then 50 more tomorrow | Market FR or GB, Must have = email, New contacts = 50 |
| Agency | Only shops with email **and** phone | Must have = email + phone |
| SaaS / data ops | A scheduled CRM feed of new Pro contacts | Same Must have, rerun on a schedule |
| Ops in another Pro country | Same job on IT, ES, BE, GB… | Change the market, rerun |
| KYB / enrich | Directors and HQ on the company number Vinted already shows | France → INSEE · UK → Companies House |

**What you get by default:** email and phone **as Vinted displays them**, `emailPublic` / `phonePublic`, company name, legal number, city. One row per Pro shop that passed **Must have**.

**Company register (optional):** on **France**, tick **Add INSEE company file** for directors, VAT, NAF and HQ (same source as [French Companies · Search & SIREN Enrich](https://apify.com/corent1robert/recherche-entreprises-scraper), extra `$0.005` per match). On the **United Kingdom**, tick **Add Companies House file** for directors, SIC, status and registered office (same source as [UK Companies House · Search, Directors & PSC](https://apify.com/corent1robert/uk-companies-house-scraper), extra `$0.004` per match). Both are off by default. Ireland uses CRO, not Companies House — that option is ignored there.

**When to tighten Must have:** outbound that needs a reachable inbox should keep **Public email**. Add **Public phone** only if you will call — fewer shops pass, so a 50-row run takes longer.

**Honest fill (20 Pro, France, Aug 2026):** company name 20/20 · legal number 19/20 · **clear email ~40%** · **clear phone ~25%**. If you require a public email, the Actor opens extra shops until your batch is full — you pay only for rows that pass.

### Quick start

1. Set **New contacts this run** to `50` (or `20` on the free plan).
2. Keep **Must have** on **Public email**.
3. Pick the **market**.
4. Optionally tick a company register: **INSEE** on France, **Companies House** on the UK.
5. Click **Start**. Rerun later for the next batch.

Free plan: **20 new contacts per run**.

### How it works

1. You set the batch size, Must have, and market.
2. The Actor browses that market for Vinted Pro shops you have not opened yet.
3. It keeps a row only when every Must-have field is already public (masked `******@…` is not a public email).
4. On France with INSEE on, or on the UK with Companies House on, it looks up the public register from the Pro legal number and attaches the company file.
5. C2C accounts are skipped and not billed. The next cloud run skips shops from earlier runs.

### Ready-made examples

Four saved tasks (20 emails, 50 emails, a 5-row sample, email+phone) are ready for the Examples tab once this Actor is public. Until then, use the Console defaults above.

### What it extracts

| Category | Fields |
|----------|--------|
| Shop | `sellerId`, `sellerLogin`, `sellerUrl`, listing count |
| Contact | Email / phone as shown · `emailPublic` / `phonePublic` (`false` when Vinted used `*`) |
| Company | `legalName`, `legalCode` (national number when shown), registrar, entity type |
| Place | City, country |
| Social | Instagram, TikTok, Facebook, website — when the public bio has them |
| France INSEE (optional) | `companySiren`, VAT, NAF, legal form, directors, HQ address, status — when **Add INSEE company file** is on |
| UK Companies House (optional) | `companyNumber`, SIC, legal form, directors, registered office, status — when **Add Companies House file** is on |

### Input

Console fields only:

| Field | Description |
|-------|-------------|
| `maxNewContacts` | How many **new** rows this run. **0** = no numerical cap (the run still stops at time / market breadth). Free plan: **20 / run**. You are billed only for rows that pass Must have. |
| `requiredFields` | Must have: public email, public phone, company, legal number. Default: public email. |
| `market` | Country site where Pro shops actually appear: **FR, IT, ES, BE, NL, PT, GB, IE, LU**. Default France. |
| `enrichSiren` | France only. Public INSEE company file (directors, VAT, NAF, HQ). Default off. Extra `$0.005` per successful match. |
| `enrichUkCompany` | United Kingdom only. Public Companies House file (directors, SIC, registered office). Default off. Extra `$0.004` per successful match. |

```json
{
    "maxNewContacts": 50,
    "requiredFields": ["email"],
    "market": "FR",
    "enrichSiren": false,
    "enrichUkCompany": false
}
```

#### API-only keys

Not shown in the Console. Safe to omit.

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `resetSeen` | boolean | `false` | Ignore shops from previous runs. Leave off so reruns never duplicate. |
| `sellerIds` | string\[] | — | Force specific seller ids / `/member` URLs instead of browsing the market. |
| `searchText` | string | — | Restrict discovery to this catalog keyword. |
| `maxSellers` | integer | — | Legacy cap. Ignored when `maxNewContacts` is set. |
| `concurrency` | integer | `8` | How many Pro profiles to open at once (1–16). |
| `verboseLogs` | boolean | `false` | Extra debug lines (routes, catalog pages). |
| `proxyConfiguration` | object | cloud: Apify Proxy on | Cloud runs use Apify Proxy by default. |
| `maxListingsToScan` | integer | derived | Upper bound on listing cards scanned while looking for new shops. |

On Apify cloud, CLI / API input overwrites these keys. Locally, `storage/key_value_stores/default/INPUT.json` (or `--input-file`) overwrites overlapping keys from repo-root `input.json`.

### Output example

Anonymized. Only rows that passed **Must have** are in the dataset. `emailPublic: true` means the mailbox was not masked.

```json
{
    "sellerLogin": "example_pro_shop",
    "sellerEmail": "shop@example.com",
    "sellerPhone": "+33600000000",
    "legalName": "Example Retail SAS",
    "legalCode": "12345678900012",
    "sellerCity": "Paris",
    "sellerUrl": "https://www.vinted.fr/member/1234567890",
    "sellerInstagram": "https://www.instagram.com/example_shop",
    "sellerWebsite": "https://example.com",
    "emailPublic": true,
    "phonePublic": true,
    "market": "FR",
    "sirenEnriched": true,
    "companySiren": "123456789",
    "companyVat": "FR32123456789",
    "companyNaf": "47.91B",
    "companyDirectorName": "Jane Example",
    "companyDirectorRole": "Président"
}
```

United Kingdom row with Companies House on (anonymized):

```json
{
    "sellerLogin": "example_uk_shop",
    "sellerEmail": "shop@example.co.uk",
    "legalName": "Example Retail Ltd",
    "legalCode": "01234567",
    "sellerCity": "London",
    "sellerUrl": "https://www.vinted.co.uk/member/1234567890",
    "emailPublic": true,
    "market": "GB",
    "ukEnriched": true,
    "companyNumber": "01234567",
    "companySic": "47190 Retail sale",
    "companyLegalForm": "Private limited company",
    "companyDirectorName": "Jane Smith",
    "companyDirectorRole": "Director",
    "companyStatus": "Active"
}
```

Dataset views: **Pro contacts**, **Outreach CRM**, **France INSEE**, and **UK Companies House** (directors and registered office when the matching enrich is on).

### How much does it cost to scrape Vinted Pro contacts?

HTTP-only (no browser). Pay-per-event, **no Actor-start fee**. Same prices on every paid Apify plan. You pay only for the events below.

| Store event | When you are billed | Price |
|-------------|---------------------|-------|
| **Pro seller exported** (`pro-seller`) | One new contact that passed **Must have** | **$0.008** |
| **France INSEE company file** (`siren-enrich`) | One successful INSEE match | **$0.005** |
| **UK Companies House file** (`uk-company-enrich`) | One successful Companies House match | **$0.004** |

Not billed: Actor start, catalog discovery, C2C, shops already opened, Must-have misses, and register lookups with no match or no legal number.

| Scenario | Free plan | Paid | Paid + INSEE (all matched) | Paid + Companies House (all matched) |
|----------|-----------|------|----------------------------|--------------------------------------|
| 20 new contacts (first try) | 20 / run cap | ~$0.16 | ~$0.26 | ~$0.24 |
| 50 new contacts | 20 then upgrade | ~$0.40 | ~$0.65 | ~$0.60 |
| 1,000 new contacts | — | ~$8.00 | ~$13.00 | ~$12.00 |
| 50,000 new contacts | — | ~$400 | ~$650 | ~$600 |

Compute is small next to PPE. A 50-contact run is typically about a minute on a live Pro market. Residential proxy is not required for typical runs.

### Is scraping Vinted Pro contacts free?

Apify **Free** plan: **20 new contacts per run**. Paid plans follow the Store events: **Pro seller exported** `$0.008`, **France INSEE company file** `$0.005` per match, **UK Companies House file** `$0.004` per match.

### Is it legal to scrape Vinted Pro contacts?

This Actor only reads the public legal block Vinted shows on Pro profiles without a login. It skips C2C accounts. As with any data containing personal information, ensure your use complies with GDPR and relevant regulations.

### FAQ

**Do I need a Vinted account?** No.

**Will every row have a clear email?** Only if **Must have** includes public email. Vinted still masks a large share of shops — those are skipped, not exported.

**I reran and got the same people.** Cloud runs remember opened shops and skip them. Local `apify run --purge` forgets that list.

**I wanted 50 and got fewer.** This run skipped shops already opened, or the market had no more Pro shops with a public email. Run again later — new listings appear over time. Do not lower the cap: 50 means 50.

**The run felt slow.** Cloud runs now use Apify Proxy (several sessions) and stop extra catalog traffic when enough shops are already in the queue. If Vinted is rate-limiting a market, a later run is usually faster.

**I picked Germany / Austria / Hungary / Poland and got nothing.** Those countries are not in the Console. This Actor only lists markets where Pro shops actually appear.

**INSEE enrich did nothing on Italy / the UK.** That option is France only. Other markets ignore it.

**Companies House enrich did nothing on France.** That option is the United Kingdom only. Ireland uses CRO, not Companies House.

**I need a full UK company file (PSC, filings, website contacts).** Use **[UK Companies House · Search, Directors & PSC](https://apify.com/corent1robert/uk-companies-house-scraper)** with the company numbers from this export.

**I need listings, not contacts.** Use **[Vinted · Listings by Search](https://apify.com/corent1robert/vinted-listings-pro-sellers)**.

**I need a full French company file (finances, all establishments).** Use **[French Companies · Search & SIREN Enrich](https://apify.com/corent1robert/recherche-entreprises-scraper)** with the SIRENs from this export.

### Also available

**[Vinted · Listings by Search](https://apify.com/corent1robert/vinted-listings-pro-sellers)** — Titles, prices, photos.

**[French Companies · Search & SIREN Enrich](https://apify.com/corent1robert/recherche-entreprises-scraper)** — Full INSEE file from a SIREN list or Pappers URL.

**[UK Companies House · Search, Directors & PSC](https://apify.com/corent1robert/uk-companies-house-scraper)** — Full Companies House file from a company number or name search.

**[PrestaShop · Catalog Copy by Store URL](https://apify.com/corent1robert/prestashop-catalog-copy)** — Export or copy a public PrestaShop catalog.

### Local development

`.actor/INPUT.json` is a **20-row** smoke (same keys as Console, smaller cap). Console Try prefills **50**.

```bash
npm install
npm test
apify run
```

`apify run` validates `storage/key_value_stores/default/INPUT.json` against the input schema. Use `--input-file=./input.json` if that file is missing required keys. Optional repo-root `input.json` is a local preset; **CLI / KV input wins** on overlapping keys.

### Support

Questions or a custom export: <corentin@outreacher.fr>.

# Actor input Schema

## `maxNewContacts` (type: `integer`):

Stop after this many rows that pass your Must-have fields. **0** = no cap. Free plan: 20 / run. You are billed only for rows that pass.

## `requiredFields` (type: `array`):

Keep the shop only if Vinted already shows these in the public Pro block. Masked \*\*\*\*\*\*@… is not a public email. Default: public email.

## `resetSeen` (type: `boolean`):

API only. Ignore shops from previous runs. Leave off so reruns never duplicate.

## `market` (type: `string`):

Country site where Pro shops actually appear. Default France.

## `enrichSiren` (type: `boolean`):

France only. Looks up the Pro legal number on the public INSEE register (same source as French Companies · Search & SIREN Enrich): directors, VAT, NAF, HQ. Extra $0.005 per successful match. Ignored on other markets.

## `enrichUkCompany` (type: `boolean`):

United Kingdom only. Looks up the Pro company number on the public Companies House register (same source as UK Companies House · Search, Directors & PSC): directors, SIC, status, registered office. Extra $0.004 per successful match. Ignored on other markets.

## `sellerIds` (type: `array`):

Optional. API only.

## `searchText` (type: `string`):

Optional. API only.

## `maxSellers` (type: `integer`):

Ignored when New contacts this run is set.

## `concurrency` (type: `integer`):

How many Pro profiles to open at once.

## `verboseLogs` (type: `boolean`):

Print extra debug lines in the run log.

## Actor input object example

```json
{
  "maxNewContacts": 50,
  "requiredFields": [
    "email"
  ],
  "resetSeen": false,
  "market": "FR",
  "enrichSiren": false,
  "enrichUkCompany": false,
  "concurrency": 8,
  "verboseLogs": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Full export — one Pro seller per row.

## `proSellers` (type: `string`):

Public email, phone and company when shown.

## `outreachCrm` (type: `string`):

Email, phone, company, Instagram and profile URL.

## `franceInsee` (type: `string`):

Pro contact plus INSEE directors, VAT, NAF and HQ when enrich is on.

## `ukCompaniesHouse` (type: `string`):

Pro contact plus Companies House directors, SIC and registered office when enrich is on.

## `runLog` (type: `string`):

Text log mirrored from the run console.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxNewContacts": 50,
    "requiredFields": [
        "email"
    ],
    "market": "FR",
    "enrichSiren": false,
    "enrichUkCompany": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/vinted-pro-siret-company").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxNewContacts": 50,
    "requiredFields": ["email"],
    "market": "FR",
    "enrichSiren": False,
    "enrichUkCompany": False,
}

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/vinted-pro-siret-company").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxNewContacts": 50,
  "requiredFields": [
    "email"
  ],
  "market": "FR",
  "enrichSiren": false,
  "enrichUkCompany": false
}' |
apify call corent1robert/vinted-pro-siret-company --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corent1robert/vinted-pro-siret-company"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8LrLRMcLCRCddNTmP/builds/iZGyM3c5RBkRcegww/openapi.json
