LinkedIn and XING People Search via DuckDuckGo

Site html.duckduckgo.comTask linkedin-people-searchVersion v5Updated Aug 21, 2026Category search

Search public LinkedIn, XING, and broader web results for organization, role, person, and geographic terms through DuckDuckGo's HTML endpoint, with exact-name closure searches, organization-identity variants, role discovery, concrete result extraction, pagination handling, and optional residential-proxy fallback. This skill was captured from a live agent session on html.duckduckgo.com and publishes here verbatim, exactly as an agent receives it.

NoteSelectors and URL schemes drift as sites change. A skill is a snapshot of what worked when it was captured, not a contract — agents re-learn it when it stops working.

Purpose

Find public LinkedIn and XING people-profile results, plus broader web evidence for unresolved contacts, matching an organization, role, person, and geographic terms without navigating LinkedIn or XING directly. This returns search-result evidence, not verified profile data.

When to Use

Use when the caller needs a public search-engine-derived contact or prospecting matrix and provides an organization name plus optional exact names, role variants, unresolved people, or region terms. Use exact-name patterns for closing a known person's public-profile search, role patterns for discovering otherwise unnamed contacts, and broader organization-plus-name/role searches when a person or function remains unresolved. Use organization-identity variants when punctuation, legal suffixes, trademark symbols, or spacing differences may prevent an exact organization phrase from matching.

Workflow

  1. Construct one or more source-specific queries with the caller's values:
  • LinkedIn organization/role search: site:linkedin.com/in "{organization}" ({role-term-1} OR {role-term-2} OR {role-term-3}) ({region-1} OR {region-2} OR {region-3})
  • XING organization/role search: site:xing.com/profile "{organization}" ({role-term-1} OR {role-term-2} OR {role-term-3}) ({region-1} OR {region-2} OR {region-3})
  • Exact-name LinkedIn/XING search: "{person}" "{organization}" (site:linkedin.com/in OR site:xing.com/profile)
  • Exact-name fallback: "{person}" {organization} (linkedin OR xing)
  • Role-discovery search: "{organization}" ({role-term-1} OR {role-term-2} OR {role-term-3}) site:linkedin.com/in
  • Organization-identity closure search: (site:xing.com OR site:linkedin.com/company) ("{organization-variant-1}" OR "{organization-variant-2}" OR "{legal-name-variant}")
  • Organization-variant LinkedIn people search: site:linkedin.com/in ("{organization-variant-1}" OR "{organization-variant-2}" OR "{legal-name-variant}")
  • Broader closure search for an unresolved person: "{person}" "{organization}" or "{person}" {organization} ({role-term-1} OR {role-term-2})
  • Broader closure search for an unresolved function: "{organization}" ({role-term-1} OR {role-term-2} OR {role-term-3}) ({name-1} OR {name-2})
  • Local-language role synonyms for the target market may be supplied as alternatives — e.g. Vertrieb or "Technischer Vertrieb" alongside Sales for a German-speaking market — so profiles written in that language are not missed. Omit optional role, person, name, or region groups when they are not requested. Keep every OR group parenthesized so organization and other required terms are not bypassed by search-engine operator precedence. Run separate LinkedIn and XING queries when both services are required. For organization variants, include only meaningful spelling, punctuation, capitalization, trademark, and legal-suffix alternatives; do not broaden away the organization constraint.
  1. URL-encode each complete query and navigate directly to https://html.duckduckgo.com/html/?q={url-encoded-query}. Use a configured residential proxy for this navigation when datacenter traffic is blocked; proxy credentials and configuration remain outside the skill.
  2. In the same browser-agent call for each loaded result page, after domcontentloaded, evaluate:
(() => {
  const clean = s => (s || '').replace(/\s+/g, ' ').trim();
  const results = [...document.querySelectorAll('.result')]
    .map(r => {
      const a = r.querySelector('a.result__a');
      const sn = r.querySelector('.result__snippet');
      return {
        title: clean(a ? a.textContent : ''),
        url: a ? a.href : '',
        snippet: clean(sn ? sn.textContent : '').slice(0, 300)
      };
    })
    .filter(x => x.url);
  return {
    engine: 'duckduckgo-html',
    url: location.href,
    count: results.length,
    results
  };
})()
  1. For more results, follow DuckDuckGo's next-results link from the current HTML result page and run the same extractor on each loaded page. Combine requested query pages, deduplicate by URL, and retain the title and snippet as search-result evidence. Label each result with its originating query or source outside the extractor when a cross-source matrix is needed.

Site-Specific Gotchas

  • DuckDuckGo's lightweight endpoint is /html/; use its q query parameter rather than the homepage search form.
  • The stable result structure is .result containing a.result__a and .result__snippet; ordinary page text is not a reliable substitute because it mixes navigation and result content.
  • Restrict LinkedIn searches with site:linkedin.com/in and XING searches with site:xing.com/profile; otherwise company pages, jobs, and unrelated documents can dominate results.
  • An organization identity search may intentionally use site:linkedin.com/company alongside site:xing.com to locate company-level evidence and discover spelling or legal-name variants before running people searches.
  • Exact-name queries should include the organization and preferably both service restrictions; names alone can produce homonyms.
  • For role discovery, include local-language and English role synonyms in one grouped OR expression, but keep the organization as a required term.
  • Broader closure queries are useful when the requested person or department is not reliably represented by a LinkedIn/XING profile, but their results are unverified web evidence and should be separated from profile results.
  • Search-result links can be redirects or unavailable LinkedIn/XING pages. Preserve the returned URL and do not claim that a profile was verified unless the caller separately verifies it.
  • A residential proxy may be required when DuckDuckGo blocks datacenter-origin traffic. Do not place proxy credentials, cookies, or tokens in the query URL or extractor.
  • If a caller explicitly requires more results, handle additional DuckDuckGo result pages separately and deduplicate the extracted URLs.
  • The extractor reads only the currently loaded result page and is intended for the HTML endpoint; selectors may not apply to DuckDuckGo's JavaScript interface.

Expected Output

For each query, return an object containing engine, the final DuckDuckGo url, count, and results. Each result has exactly title, url, and a whitespace-normalized snippet capped at 300 characters. When combining queries, return the deduplicated union and preserve each item's source query or source site as an additional caller-level field. Treat all entries as unverified public search evidence.

Call it

GET https://production-sfo.browserless.io/skills?token=TOKEN-HERE&domain=html.duckduckgo.com&task=linkedin-people-search