> ## Documentation Index
> Fetch the complete documentation index at: https://docs.2extract.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Enrichment

> Fill gaps in your own records from public web sources, with an agent that provisions and manages the proxies for you.

You have a table with holes in it: companies without an industry, products without a current price, contacts without a location. The data exists on the open web. Collecting it at any volume from one IP does not work.

***

## Why this needs proxies at all

Enrichment is many small requests to the same few domains - exactly the shape rate limiters are built to catch. From a single IP you get maybe a few hundred rows before the responses turn into 429s and blocks.

Spreading the requests across residential IPs turns the same job into ordinary traffic.

***

## The setup

One proxy per source, so you can see per-source cost and stop one without touching the others:

> I am enriching 40,000 company records from three sources. Create a proxy for each, name them after the source, cap each at 25 GB a month, and give me the connection strings.

```text icon="terminal" theme={null}
getAccountBalance      ⌐ $149.95 available

createProxyResource    ⌐ enrich_company_registry
                         "Company registry lookups for the Q3 enrichment run"
setProxyLimits         ⌐ 25 GB per month

createProxyResource    ⌐ enrich_job_boards
                         "Job board data collection, headcount and hiring signals"
setProxyLimits         ⌐ 25 GB per month

createProxyResource    ⌐ enrich_review_sites
                         "Review site ratings and counts"
setProxyLimits         ⌐ 25 GB per month
```

Three separate resources rather than one shared proxy is the point: when the registry source starts blocking, you rotate that one and the other two keep running.

<Tip>
  Ask the agent to write the run into the description - "Q3 enrichment run" - and you will still know what these were for when you find them next quarter.
</Tip>

***

## Rotating versus sticky

Enrichment is the case where the default behaviour is what you want. Without a `session` parameter, each request gets a fresh IP - which is exactly right for independent lookups.

Reach for a sticky session only when a single record needs several requests in sequence: a search, then a detail page, then a sub-page. Then hold the IP for that record and drop it:

```
...-proxy-enrich_company_registry-session-rec_88412-time-2:...
```

Use the record ID as the session ID and a short TTL. See [Session Control](/proxy-products/configuration/session).

***

## Watching the cost while it runs

Enrichment jobs have a habit of costing more than the estimate. Ask mid-run:

> How much traffic and money have the three enrichment proxies used today?

```text icon="terminal" theme={null}
getAccountTrafficUsage  date_from: 2026-08-10  date_to: 2026-08-10

  enrich_company_registry    4.2 GB    $16.76
  enrich_job_boards         11.8 GB    $47.08
  enrich_review_sites        1.1 GB     $4.39

Total today: 17.1 GB · $68.23
```

The job boards proxy is using three times the others. That is worth knowing on day one rather than at the invoice - usually it means a source is returning full pages where you only need a fragment.

***

## Country matters more than you think

Many sources return different data by visitor location: local pricing, regional availability, translated fields. If your records are European, enriching them through US exit IPs quietly gives you the wrong values.

Set the country in the username per batch:

```
...-proxy-enrich_company_registry-country-de:...
```

One proxy covers every country you need - the country is a username parameter, not a property of the resource.

***

## When the run is done

> The Q3 enrichment run is finished. Deactivate the three enrich\_ proxies.

Deactivation stops the traffic and keeps the resource, so the next run reuses the same names and the same history. The agent will not delete them unless you explicitly ask.

***

## Next steps

<CardGroup cols={2}>
  <Card title="Price Monitoring" icon="tag" href="/ai/use-cases/price-monitoring">
    The same shape, run on a schedule instead of once.
  </Card>

  <Card title="Provisioning & Cost Control" icon="gauge" href="/ai/use-cases/provisioning-cost-control">
    Keeping a long job inside a budget.
  </Card>
</CardGroup>
