LinkedIn Scraper

Search Services

Search LinkedIn service-provider listings (freelance/agency services) by keyword.

1 creditNo API key needed

Endpoint

Parameters

NameTypeRequiredNote
searchstring · requiredstringrequired

Service to search for, e.g. "web development". A multi-word term is matched as a phrase, so it will not pull in every provider who happens to mention both words. Separate several services with COMMAS to match any of them — "web development, mobile apps" is sent as an OR of the two exact phrases. Boolean syntax is passed through untouched if you prefer to write it yourself.

Example: web development

limitnumber · optionalnumberoptional

Max number of services to return (1-1000). Default: 100. Each page returns up to 10 services, so a smaller number here also means fewer pages scraped.

Default: 100

Example: 100

Response schema

{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "elements"
  ],
  "properties": {
    "hasMore": {
      "type": "boolean",
      "description": "True only when the provider still had reachable data and this execution stopped early. A managed Agent must treat this as an incomplete batch, never as completion."
    },
    "elements": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "services": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The provider's LinkedIn service categories"
          },
          "linkedinUrl": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "nextPage": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "returned": {
      "type": "number",
      "description": "How many records this run returned, after any `limit` was applied. ONE EXCEPTION: on a chat preview — where `truncated` is true — this is the count actually FETCHED while `elements` carries only a short sample of them, so the two deliberately disagree. Read `truncated` before comparing this against the array length; in a workflow it is never set and the two always match. Matches the other LinkedIn data tools, whose `meta.returned` is the fetched count on a truncated preview too."
    },
    "truncated": {
      "type": "boolean"
    },
    "stopReason": {
      "enum": [
        "cancelled",
        "provider-error",
        "empty-page-stall",
        "caller-limit",
        "presentation-preview",
        "cursor-stall",
        "runtime-page-window",
        "time-budget"
      ],
      "type": "string"
    },
    "suggestion": {
      "type": "string"
    },
    "totalCount": {
      "type": "number",
      "description": "How many records the search MATCHES, per the provider — the grand total, routinely in the millions while the endpoint will only serve about a thousand of them. Do NOT compare it with the row count to decide whether a run was complete, and do not paginate towards it: use `servableCount` for what is actually reachable. Absent when the provider sent no count."
    },
    "totalPages": {
      "type": "number"
    },
    "pagesScraped": {
      "type": "number"
    },
    "servableCount": {
      "type": "number",
      "description": "How many records this endpoint will serve across all its pages — the real ceiling on what any number of runs can reach, which the provider caps well below `totalCount` on most search endpoints. Absent when the provider sent no count."
    },
    "totalElements": {
      "type": "number",
      "description": "DEPRECATED — despite the name this is the count RETURNED by this run, not a grand total, so it equals your `limit` on a limited run. Kept at that value so existing flows do not change meaning. Use `returned` for this number, `totalCount` for how many records match, or `servableCount` for how many are reachable."
    },
    "nextPaginationToken": {
      "type": "string"
    }
  },
  "additionalProperties": true
}

Get started

How to use this tool

  1. Connect your AI

    Add Connie to ChatGPT, Claude or Slack once, and this tool comes with it. There’s no API key or account to set up.

  2. Ask for the outcome

    Describe what you need in plain words. Your AI runs this tool when the job calls for it, along with any others it needs.

  3. Make it a workflow

    Add it as a step in a workflow that runs the same way every time, on a schedule or when something happens.

  4. Stay in control

    Choose whether it runs on its own or asks first. When it asks, you see an Allow or Deny card before any credits are spent.