Domain to LinkedIn URL Resolver Clay-Ready Company URL avatar

Domain to LinkedIn URL Resolver Clay-Ready Company URL

Pricing

from $6.00 / 1,000 results

Go to Apify Store
Domain to LinkedIn URL Resolver Clay-Ready Company URL

Domain to LinkedIn URL Resolver Clay-Ready Company URL

Resolves a company domain to its LinkedIn company URL via pattern matching and web search. Fixes the 15-20% miss rate in Clay native enrichment. Flat output with LinkedIn URL, employee count, industry, social URLs, and confidence score. MCP-ready for Claude Desktop and AI agents.

Pricing

from $6.00 / 1,000 results

Rating

4.0

(1)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

2

Bookmarked

124

Total users

16

Monthly active users

4 days ago

Last modified

Share

Domain to LinkedIn URL Resolver

Resolves a company domain or name to its LinkedIn company URL, with social URLs and firmographics in the same flat row. Fixes the miss rate in Clay's native LinkedIn enrichment.


What's New

  • Pricing now published. $0.006 per result. The lowest-priced actor in the Mamba Labs suite.
  • Clay table template available. Pre-built fallback enrichment table for rows where Clay's native LinkedIn lookup returned empty. Open the template →
  • v0.3.x overhaul. Firmographic enrichment from LinkedIn JSON-LD (employee count, HQ, description, industry, follower count). Social URL resolution via Brave Search. Multi-slug pattern matching with 9 candidate variants. Residential proxy with 5-attempt retry on every external call. Bing fallback replacing DuckDuckGo for enrichment queries. Confidence scoring rebuilt with real validation.

Why not use a free tool?

Free tools return a URL or null. That's it.

You get no signal on how the URL was found, no confidence rating, and no way to gate downstream work on data quality. In a Clay workflow processing thousands of rows, a wrong LinkedIn URL silently propagates into your sequences.

This actor returns resolution_method, confidence (high / medium / low), and slug_mismatch on every row, so you can filter to trusted rows in Clay and route the rest to manual review. Every resolved row also carries social URLs and rich firmographics pulled from the public LinkedIn page itself, so a single call usually replaces a second enrichment step.


How it works

The actor does the LinkedIn URL lookup first, then enriches the resolved row from two separate sources.

Step 1: LinkedIn URL lookup. Two-method cascade.

  1. Pattern match. Derives up to nine candidate slugs from the domain (bare stem first, then common shapes: {stem}hq, {stem}-hq, {stem}inc, {stem}-inc, {stem}-io, {stem}-app, {stem}-group, plus a hyphen-collapsed form). Each candidate is HEAD-validated against LinkedIn in parallel; the first that returns a valid page wins. This catches non-obvious slugs like brex.com resolving to /company/brexhq. No external search call, no search rate limits.
  2. Web search fallback (DuckDuckGo). If pattern matching fails, the actor runs a DuckDuckGo search and extracts the first matching LinkedIn company URL. This path mostly handles obscure or recently renamed companies.

Step 2: Firmographic enrichment. Once the LinkedIn URL is resolved, the actor GETs the public LinkedIn company page and parses the Organization JSON-LD block on the page (schema.org @type: Organization). That gives the exact employee count, structured headquarters address, canonical company name, and full description. Follower count comes from a regex over the rendered page text. Industry comes from the page's "About" section via LinkedIn's stable data-test-id="about-us__industry" marker. A Bing search snippet is a graceful fallback for description and canonical name when the LinkedIn page itself is unreachable.

Step 3: Social URLs. One combined Brave Search query, {name} site:facebook.com OR site:instagram.com OR site:x.com OR site:twitter.com OR site:youtube.com, returns the company's profile URLs on all four platforms in a single SERP. Brave honors the site: operator, returns plain URLs (no decoder needed), and reliably surfaces the company's actual handles when they exist.

Every external fetch (LinkedIn HEAD, LinkedIn page GET, DuckDuckGo, Bing, Brave) retries up to five times with a fresh residential proxy IP per attempt, which defeats per-IP throttling. If you only have a company name and no domain, the actor skips pattern matching and goes straight to the web search fallback. Both input paths return the same flat output row.


Input

At least one of company_domain or company_name must be provided.

FieldTypeRequiredNotes
company_domainStringNoBare domain, e.g. stripe.com. Required if company_name is not provided. Enables pattern matching before the web search fallback.
company_nameStringNoCompany name. Required if company_domain is not provided. When provided alongside a domain, improves search accuracy and gives a fallback display name.

Example with domain:

{
"company_domain": "stripe.com",
"company_name": "Stripe"
}

Example with name only:

{
"company_name": "Linear"
}

Output

One flat row per input. Every field is always present; missing values are null.

FieldTypeDescription
company_domainStringEchoed from input, or null if not provided
company_nameStringEchoed from input, then the canonical name from LinkedIn's JSON-LD, then a name derived from the domain (in that order of preference)
linkedin_company_urlStringFull LinkedIn company URL, e.g. https://www.linkedin.com/company/stripe
linkedin_slugStringSlug only, e.g. stripe
resolution_methodStringpattern_match / google_search / not_found / error
confidenceStringhigh / medium / low
slug_mismatchBooleantrue when the resolved slug differs from the slug derived from the domain
facebook_urlStringFacebook page URL, or null if not found
instagram_urlStringInstagram profile URL, or null if not found
twitter_urlStringX (Twitter) profile URL, or null if not found
youtube_urlStringYouTube channel URL, or null if not found
employee_count_approxStringExact employee count from LinkedIn's JSON-LD, formatted with thousands separators (e.g. "15,356"). Field name kept for Clay column compatibility; the value is now an exact integer, not a range. Null if missing.
industryStringIndustry label from LinkedIn's About section (e.g. "Financial Services"). Null if the company has not filled it in.
hq_locationStringHeadquarters as "City, State, Country" from LinkedIn's JSON-LD address. Null if missing.
follower_countStringLinkedIn follower count with thousands separators (e.g. "312,997"). Null if missing.
company_descriptionStringCompany description from LinkedIn's JSON-LD, capped at 500 characters. Null if missing.
run_dateStringISO timestamp of run

Confidence and resolution_method explained

resolution_method tells you how the URL was found:

  • pattern_match: slug derived from the domain, validated directly against LinkedIn. Fastest and most reliable.
  • google_search: URL found via web search. The output value stays google_search for Clay column compatibility; the search engine is actually DuckDuckGo.
  • not_found: neither method returned a result.
  • error: no valid input was provided.

confidence tells you how much to trust the result:

  • high: a pattern_match hit (validated directly against LinkedIn), or a web search result that validates against LinkedIn and whose slug closely matches the domain.
  • medium: a web search result that validates against LinkedIn but whose slug is only a loose match to the domain. Worth a quick review before using.
  • low: no result, a result that did not validate, or an error state.

Use confidence as a Clay view filter. Pass high rows straight to enrichment. Route medium, not_found, and any rows with key firmographic fields missing to manual review.


Social URLs

Facebook, Instagram, X (Twitter), and YouTube company URLs come from a single Brave Search query that anchors each result to the platform's domain via a site: restriction. This avoids cross-platform false positives, for example a "share on LinkedIn" link inside a Facebook result. When a company does not maintain a profile on a platform, that field returns null for that platform.


Firmographics

Firmographics come from the public LinkedIn company page after the URL resolves. The actor parses the Organization JSON-LD block (schema.org @type: Organization) for canonical fields:

  • employee_count_approx: exact integer from numberOfEmployees.value, formatted with thousands separators.
  • hq_location: "City, State, Country" built from the JSON-LD address (PostalAddress).
  • company_description: full description, capped at 500 characters.
  • company_name: canonical name (used when no company_name was supplied as input).

follower_count is regex-extracted from the rendered page text. industry is pulled from the page's "About" section via LinkedIn's stable data-test-id="about-us__industry" marker.

All fields are nullable. Smaller companies that omit data on their LinkedIn page will return null for the missing fields, which is normal.


slug_mismatch

slug_mismatch is true when the resolved LinkedIn slug differs from the slug derived from the domain. brex.com derives the stem brex, but the live page is /company/brexhq, so slug_mismatch is true. It is not an error; it is a quality flag that tells you the resolver landed on a non-obvious slug. Useful when spot-checking a batch.


Sample output

brex.com, a non-obvious slug with full firmographics and socials:

{
"company_domain": "brex.com",
"company_name": "Brex",
"linkedin_company_url": "https://www.linkedin.com/company/brexhq",
"linkedin_slug": "brexhq",
"resolution_method": "pattern_match",
"confidence": "high",
"slug_mismatch": true,
"facebook_url": "https://www.facebook.com/BrexHQ",
"instagram_url": "https://www.instagram.com/brexhq",
"twitter_url": "https://www.x.com/brexhq",
"youtube_url": "https://www.youtube.com/@BrexHQ",
"employee_count_approx": "1,859",
"industry": "Financial Services",
"hq_location": "San Francisco, California, US",
"follower_count": "312,997",
"company_description": "Brex is the intelligent finance platform built for speed and control, empowering founders and finance teams to spend smarter and move faster globally with intuitive corporate cards, banking, expenses, and travel...",
"run_date": "2026-05-28T07:34:50.730Z"
}

Reliability and known failure modes

Every field is best-effort. When a source is blocked, rate-limited, or simply does not carry the data for a given company, the field returns null rather than a guess. Use confidence and slug_mismatch as your primary trust signals in Clay.

Field(s)SourceHow it can failLikelihoodWhat the actor does about it
linkedin_company_url, linkedin_slug, resolution_method, confidence, slug_mismatchHEAD validation against LinkedIn for up to nine slug variants; DuckDuckGo fallback when no variant matchesRenamed or recently deleted LinkedIn pages stop validating; obscure companies may have no matching slug and no search resultLow for established companies; higher for newly renamed or unknown companies5 HEAD attempts with residential IP rotation; web search fallback; confidence and slug_mismatch flag uncertain cases
company_name, company_description, employee_count_approx, hq_locationOrganization JSON-LD on the public LinkedIn company page (schema.org @type: Organization)Page blocked by LinkedIn for a given proxy IP (transient); a company omits the field on its profile (rare for name / description, more common for numberOfEmployees); LinkedIn drops JSON-LD entirely (low probability)Low under normal conditions; smaller companies more likely to have a null employee count5 page GET attempts with residential IP rotation; falls back to a Bing snippet for company_name and company_description when the LinkedIn page is unrecoverable
follower_countRegex over the rendered "X followers" text on the LinkedIn pageLinkedIn changes the visible label format or serves a localized non-English variantLow; the follower display has been stable for yearsSame retry contract as the rest of the page fetch
industryThe page's "About" section, located via the stable data-test-id="about-us__industry" markerSmaller companies leave Industry blank on their profile; LinkedIn could redesign the About section markupAbout 80% fill rate for established companies; null for companies that have not completed their About sectionSame retry contract; field is explicitly nullable so a missing value never blocks downstream Clay logic
facebook_url, instagram_url, twitter_url, youtube_urlBrave Search single combined site:facebook.com OR site:instagram.com OR ... queryThe company does not maintain a profile on one or more platforms; Brave rate-limits the proxy pool; Brave returns a fan-page or aggregator handle for a very generic company namePer-platform null is common (most companies do not run all four); per-row total null is rare5 Brave attempts with residential IP rotation; the site: restriction anchors results to the correct platform domain so cross-platform false positives are filtered

Structural risks

Two longer-term risks worth knowing about.

  1. LinkedIn page structure can change. The actor uses LinkedIn's most stable contracts: schema.org JSON-LD (Organization, numberOfEmployees, address) and explicit data-test-id attributes (the QA-stable markers LinkedIn maintains for its own tests). Both are less likely to change than CSS class names or DOM positions. If LinkedIn ships a major About-section rewrite, industry is the most likely casualty, follower_count second; the JSON-LD fields are the most resilient. Any breakage shows up as null, never as a wrong value.
  2. Search engines can re-block. Bing, Brave, and DuckDuckGo all rate-limit aggressively and occasionally flag entire proxy pools. The retry-with-IP-rotation contract defeats the common case; persistent pool-wide blocks are the rare-but-real failure mode. When a search engine is fully blocked, the affected fields return null. The LinkedIn URL itself still resolves via pattern matching, which only touches LinkedIn directly.
  • Treat every field as nullable. Gate downstream logic on presence (field is not empty) rather than assuming every row has every field.
  • Use confidence and slug_mismatch as your trust signals on the LinkedIn URL.
  • For mission-critical rows, route medium and low confidence, and any rows with key fields null, to a manual review queue rather than directly into an outbound sequence.
  • A sustained pattern of missing values for a single field across many rows (for example, every row missing industry for a week) usually means a provider-side change worth flagging.

Clay Table Template

A pre-built Clay table template is available with the enrichment column, formula columns, and views ready to use.

Open the Clay template →

The template includes:

  • A Run Apify Actor enrichment column wired to mambalabs/domain-to-linkedin-url-resolver
  • Formula columns for linkedin_company_url, confidence, slug_mismatch, social URLs, and firmographic fields
  • A run condition gating on rows where linkedin_company_url is empty (fallback enrichment pattern)
  • A view filter on confidence = high

Manual setup

Use this actor as a fallback enrichment column in any Clay table where linkedin_company_url is empty after native enrichment.

  1. Add a formula column: needs_linkedin = {{linkedin_company_url}} is empty.
  2. Add an Apify enrichment column. Search for domain-to-linkedin-url-resolver.
  3. Map company_domain to your domain column. Optionally map company_name to your company name column for better accuracy.
  4. Set run condition: needs_linkedin equals true.
  5. Map output fields to new columns: linkedin_company_url, confidence, slug_mismatch, the social URLs, and the firmographic fields you want.
  6. Add a view filter: confidence equals high.

This runs only on rows where Clay native enrichment failed, keeping credit usage low.


Pricing

$0.006 per result. Pay per event, billed per domain processed. No subscription, no seat license, no contract.

VolumeCost
100 domains$0.60
1,000 domains$6.00
10,000 domains$60.00

We recently reduced pricing across the Mamba Labs actor suite to bring more value to GTM teams running enrichment at scale.


Known Limitations

  • Renamed or recently deleted LinkedIn pages may stop validating until the actor's slug heuristics catch up.
  • Smaller companies often omit industry, employee_count_approx, or hq_location on their LinkedIn profile; these fields return null rather than a guess.
  • Search engines (Bing, Brave, DuckDuckGo) can rate-limit entire proxy pools. The 5-attempt residential retry contract defeats the common case, but persistent pool-wide blocks will null out the affected fields.
  • Pattern matching requires a domain; name-only inputs skip straight to the web search fallback and tend to land at medium confidence more often.

Issues and Feature Requests

Found a bug or want to request a feature? Open an issue in the Issues tab above. Response time: typically within 48 hours.


All Mamba Labs actors output flat, Clay-ready JSON. Use them together or individually.

  • GTM Hiring Signal Scraper, $0.05/result. Detects GTM hiring activity on Greenhouse, Lever, and Ashby. Returns role counts, signal tags, and velocity tracking.
  • GTM Tech Stack Signal Enrichment, $0.015/result. Detects CRM, sequencer, and marketing automation from a company's public-facing scripts. Flat boolean output.
  • GTM Signals Aggregator, $0.09/result. Runs hiring and tech stack detection in one call. Returns a composite score, recommended action, and plain-English summary.
  • Job Board Keyword Signal Scanner, $0.05/result. Scans Greenhouse, Lever, Ashby, Workday, and Rippling for any role category you define. GTM, Engineering, Finance, or custom keywords.
  • ICP Fit Scorer, $0.05/result. Scores companies against your ICP using weighted signals. Returns icp_score 0-100, icp_tier A-D, and per-signal breakdown.

Use with MCP (AI Agents)

This actor is callable as a tool over MCP (Model Context Protocol) by AI clients like Claude Desktop, Cursor, VS Code (GitHub Copilot), Windsurf, and any other MCP-compatible client. Apify hosts the MCP server at mcp.apify.com, so no custom server code is needed.

What this actor does in an MCP context

Resolves a single company domain (or name) to its LinkedIn company page URL and returns a flat row of firmographics: canonical company name, employee count, industry, HQ location, follower count, description, and social URLs (Facebook, Instagram, X, YouTube). Each result includes a resolution_method and confidence rating so an agent can decide whether to trust the row, retry, or route to manual review. Good for cheap, high-volume LinkedIn lookups inside an agent workflow.

Example prompts:

  • "Find the LinkedIn company page for stripe.com and tell me its employee count and HQ."
  • "What is the LinkedIn URL for Brex, and is the slug a non-obvious one?"
  • "Resolve linear.app to a LinkedIn company profile and pull its industry, follower count, and social URLs."

Supported MCP clients

Claude Desktop, Cursor, VS Code (GitHub Copilot), Windsurf, and any MCP-compatible client.

Add this entry to your MCP client config. The OAuth variant prompts you to authorize on first connect, so no token sits in your config file.

OAuth (recommended):

{
"mcpServers": {
"mamba-labs-linkedin-resolver": {
"url": "https://mcp.apify.com?tools=mambalabs/domain-to-linkedin-url-resolver"
}
}
}

Bearer token:

{
"mcpServers": {
"mamba-labs-linkedin-resolver": {
"url": "https://mcp.apify.com?tools=mambalabs/domain-to-linkedin-url-resolver",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}

Setup: Full Mamba Labs GTM Suite

Load all 6 Mamba Labs GTM actors as tools in a single MCP server entry.

OAuth:

{
"mcpServers": {
"mamba-labs-gtm-suite": {
"url": "https://mcp.apify.com?tools=mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer"
}
}
}

Bearer token:

{
"mcpServers": {
"mamba-labs-gtm-suite": {
"url": "https://mcp.apify.com?tools=mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}

Setup: Local server (for development and testing)

npx @apify/actors-mcp-server --tools mambalabs/domain-to-linkedin-url-resolver

Full suite:

npx @apify/actors-mcp-server --tools mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer

What the output looks like

Flat JSON, one row per input domain, well under 2KB. Every field is always present; missing values are null. The most useful fields for an agent:

  • linkedin_company_url: full LinkedIn company URL (e.g. https://www.linkedin.com/company/stripe).
  • linkedin_slug: slug only (e.g. stripe).
  • company_name: canonical name from LinkedIn's JSON-LD, falling back to the input or a domain-derived name.
  • resolution_method: pattern_match, google_search, not_found, or error.
  • confidence: high, medium, or low. Use this to gate downstream actions.
  • employee_count_approx, industry, hq_location, follower_count: firmographics pulled from the public LinkedIn page.
  • facebook_url, instagram_url, twitter_url, youtube_url: social profile URLs.

Billing

MCP runs use the same pay-per-event pricing as direct API or Console runs. Each successful result costs $0.006.

Part of the Mamba Labs GTM Suite

This actor is part of the Mamba Labs GTM Suite. See all 6 actors at https://apify.com/mambalabs


Built by Mamba Labs