All guides
USE CASES · 6 MIN READ

Proxies for Company Enrichment: Build Source-Backed Account Records

Collect public company facts with source URLs, retrieval dates, confidence and explicit missingness instead of guessing private details.

Company enrichment is useful when a sales, research or procurement workflow needs a dated answer about a public business. The record might say what a company calls its product, which countries appear on its site, or whether a public documentation page exists. These are public website facts, not a license to infer a private profile. A proxy can supply a permitted request route when the page differs by region or the collection network needs another exit. It cannot supply private contacts, license the content or make a small sample representative. Keep a rule in the record: no invented private contacts.

Start with a company record contract

Write the input, observation and accepted output before fetching anything. Use a domain list or a named set of company URLs. Define the pages in scope, the fields you need, the observation window and what counts as missing. Check for an official feed or API first. If the job concerns third-party companies, review the source terms and robots rules for the intended access pattern.

Input Action Accepted output
https://example.com, scope homepage/about/docs Fetch permitted pages and record the final URL A source-linked fact or an explicit missingness code
Target country and page field Compare a controlled route with the baseline Observed page difference with route and timestamp
Existing account record Normalize the company URL and match evidence One record with a reviewable match decision

The proxy belongs at the transport boundary. Your client still owns navigation, parsing, rate limits, storage and the decision to accept a fact. Keep request pacing within the target's stated limit. If the source returns 429, pause according to its response and schedule instead of multiplying requests through address rotation.

Make every fact traceable

A company record should let a reviewer open the exact source and understand when the observation was made. Keep source_url, retrieved_at, final_url, field, value, evidence, fact_type, confidence, match_confidence and missingness together. Evidence can be a short quoted label, a JSON-LD property name or a DOM locator that your team can reproduce. Store the page hash or an approved response identifier when that is part of your retention policy.

The W3C provenance overview describes provenance as information about the entities and activities involved in producing data. A small enrichment pipeline does not need to claim W3C compliance to apply that idea. It needs enough history to separate a published statement from an analyst's interpretation.

The following schema is hypothetical. Its values are illustrative and do not describe a real company:

{
  "company_key": "example-com",
  "canonical_url": "https://example.com/",
  "facts": [
    {
      "field": "name",
      "value": "Example Company",
      "source_url": "https://example.com/about",
      "retrieved_at": "2026-09-18T09:00:00Z",
      "evidence": "visible h1",
      "fact_type": "observed",
      "confidence": "medium",
      "match_confidence": "high",
      "missingness": null
    },
    {
      "field": "support_email",
      "value": null,
      "source_url": "https://example.com/contact",
      "retrieved_at": "2026-09-18T09:00:00Z",
      "evidence": null,
      "fact_type": "observed",
      "confidence": "unassessed",
      "match_confidence": "high",
      "missingness": "not_found"
    }
  ]
}

not_found, blocked, not_checked and conflicting mean different things. A blank cell loses that distinction. A page that asks a visitor to complete a form does not justify inventing an email address, guessing a person's address or copying a private contact from another source. Keep public role names and generic published channels separate from personal data.

Fetch conservatively and keep change evidence

Use the same client, headers and page scope for a baseline and a regional comparison. Record the observed exit separately from the page result; the geotargeting guide explains why an IP location does not prove a localized page. Cookies, language headers and account state can alter what the target returns.

For recurring checks, save an ETag when the response provides one. RFC 9110 defines If-None-Match as a conditional request field and allows a matching representation to return 304 Not Modified. That can reduce needless transfer, but it does not tell you whether the parser still recognizes the field. Revalidate the accepted output after template or parser changes.

Normalize without guessing

Treat canonicalization as a reviewable transformation. Lowercase the host, remove a known tracking parameter and follow an allowed redirect only when the policy permits it. Preserve the submitted URL, final URL and redirect chain. Do not turn a product claim into an industry classification without labeling that classification as derived.

The Organization schema lists fields such as name, url, logo, sameAs and contactPoint. Treat those as observed publisher data. A contactPoint can be absent, stale or generic; it is not a private contact. If two pages disagree, save both observations and mark conflicting until a reviewer decides which source is in scope.

For a hypothetical batch of 20 domains, an accepted report might contain 14 records with a public name and url, three with blocked pages, two with not_found descriptions and one with conflicting names. The numbers in that example are synthetic. Report the denominator and codes; do not call the 14 records “14 complete companies.”

Turn the output into a review queue

Use confidence only for support for the fact, and use match_confidence for whether the page belongs to the intended company. Keep the tiers mutually exclusive: high means the field is visible on the requested page, the URL and date are stored, and an independent permitted public source corroborates it in the same observation window; medium means a visible or structured-data value is recorded from one permitted source with its URL and date but has no independent corroboration; low means the value is stale, conflicting, derived or weakly supported. For an absent field, use unassessed with an explicit missingness code instead of forcing a confidence tier. Use match_confidence separately: high means the canonical domain and publisher identity align, medium means the match has one plausible identity signal, and low means the identity conflicts or remains unresolved. Every derived fact should carry fact_type: derived, its input fields and the rule used to derive it. These labels route records to review; they are not a numeric score or a claim of truth. If a rubric changes, version it with the record.

The market research guide covers sampling frames and named exclusions. The Maps sourcing guide explains why a returned business field is not automatically a licensed directory. For access and reuse questions, use the permission checklist and ask a qualified reviewer about the specific source and jurisdiction.

ProxyLane offers HTTP and SOCKS5 residential access with rotating or sticky sessions, location targeting and non-expiring traffic. Plans start from $2.50/GB. Request access when the record contract and source review are ready.

Sources and further reading

Request access

Keep reading

Amazon Scraper API vs Proxy: Choose a Product Data Source

Distinguish authorized Amazon APIs, licensed product data and proxy-based page checks by record quality and access rights.

Read guide

Apify Custom Proxy Setup: Use Your Own Residential Route

Connect a buyer-owned proxy to an Apify Actor, keep the session boundary clear, and validate records instead of counting requests.

Read guide

Australia Residential Proxies: Verify the AU Exit and State-Level Result

Separate Australian egress from en-AU content, AUD pricing, GST display, postcode validation and the state delivery context.

Read guide