{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Recruiter / Job Poster Finder",
    "description": "Find recruiters, hiring managers, and job posters from public LinkedIn jobs - one flat lead row per person, with job context (matched job, company, role keyword, location), relevance score, and reason tags. No LinkedIn login or cookies required.",
    "version": "1.0",
    "x-build-id": "YRm4ErXeL5O1MUdQf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/coregent~linkedin-recruiter-job-poster-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-coregent-linkedin-recruiter-job-poster-finder",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/coregent~linkedin-recruiter-job-poster-finder/runs": {
      "post": {
        "operationId": "runs-sync-coregent-linkedin-recruiter-job-poster-finder",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/coregent~linkedin-recruiter-job-poster-finder/run-sync": {
      "post": {
        "operationId": "run-sync-coregent-linkedin-recruiter-job-poster-finder",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "Discovery mode",
            "enum": [
              "jobs_with_posters",
              "recruiter_search",
              "combined"
            ],
            "type": "string",
            "description": "How to find leads.\n\n- **Jobs + visible posters** — searches jobs by your keywords/URLs and extracts the visible job poster / hiring-team people.\n- **Recruiter-titled job search** — runs job searches seeded with recruiter-style titles (yours, or a sensible default set) and extracts the people behind those postings. This does **not** search LinkedIn people/profiles; it searches jobs whose titles look recruiter-related.\n- **Combined** — runs both and deduplicates.",
            "default": "jobs_with_posters"
          },
          "keywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Job / role keywords, e.g. \"software engineer\", \"data analyst\". Each keyword is paired with each location. Required unless `jobUrls` is provided.",
            "default": [
              "software engineer"
            ],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Search locations, e.g. \"Sydney\", \"United States\", \"London\". Each keyword is paired with each location. Leave empty to search without a location filter.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "jobUrls": {
            "title": "LinkedIn job URLs",
            "type": "array",
            "description": "Direct public LinkedIn job URLs (`https://www.linkedin.com/jobs/view/<id>`) to inspect for visible posters / hiring-team data. Processed before keyword search. Invalid URLs are skipped and counted in the run summary. Search URLs pasted here still work — they are routed to Job search URLs automatically.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "LinkedIn job search URLs",
            "type": "array",
            "description": "Paste LinkedIn jobs **search** URLs (`https://www.linkedin.com/jobs/search/?keywords=...&location=...`). The URL's own filters are preserved and the actor paginates it; any filter the URL does not set is filled from this run's date / workplace / sort settings.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyUrls": {
            "title": "Target company URLs",
            "type": "array",
            "description": "LinkedIn **company** page URLs (`https://www.linkedin.com/company/<name>/`). The actor walks each company's current public openings and returns the visible recruiters / job posters behind them — the \"find the hiring contacts at these 20 target accounts\" workflow. Combined with your keywords when you supply them, otherwise all current openings.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max saved leads",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of saved unique recruiter / job-poster lead rows across the whole run. Range 1-10000.",
            "default": 100
          },
          "companyNames": {
            "title": "Company names filter",
            "type": "array",
            "description": "Keep only leads whose company (lead, matched, or job company) contains one of these terms (case-insensitive). Leave empty to keep all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleKeywords": {
            "title": "Lead title keywords",
            "type": "array",
            "description": "Filter person rows by visible title, e.g. \"recruiter\", \"talent acquisition\", \"hiring manager\". In `recruiter_search` / `combined` modes these also seed the recruiter-style searches; leave empty to use a sensible default recruiter title set.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "past_24h",
              "past_week",
              "past_month"
            ],
            "type": "string",
            "description": "Filter jobs by posting recency. Applied at the LinkedIn source where stable.",
            "default": "any"
          },
          "remoteFilter": {
            "title": "Workplace type",
            "enum": [
              "any",
              "remote",
              "hybrid",
              "onsite"
            ],
            "type": "string",
            "description": "Filter by work arrangement where visible. Applied at the LinkedIn source where stable; otherwise post-filtered.",
            "default": "any"
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Filter jobs by contract type at the LinkedIn source. Leave empty for all. An unrecognised value fails the run rather than being silently ignored.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "temporary",
                "internship",
                "volunteer",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            },
            "default": []
          },
          "experienceLevels": {
            "title": "Experience levels",
            "type": "array",
            "description": "Filter jobs by seniority at the LinkedIn source. Leave empty for all. An unrecognised value fails the run rather than being silently ignored.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entry_level",
                "associate",
                "mid_senior",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive"
              ]
            },
            "default": []
          },
          "sortBy": {
            "title": "Sort jobs by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "How LinkedIn orders the job search before this actor inspects it. `Most recent` surfaces fresh postings (whose hiring contacts are more likely to still be active); `Relevance` is LinkedIn's own ranking.",
            "default": "relevance"
          },
          "minRelevanceScore": {
            "title": "Minimum relevance score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only save (and only charge for) leads scoring at or above this 0-100 relevance score. Leave at 0 to keep every lead. Try 60 for Medium-and-above, or 80 for High only. Rows below the bar are never pushed and never charged.",
            "default": 0
          },
          "includeJobContext": {
            "title": "Include matched-job fields",
            "type": "boolean",
            "description": "Include the matched-job fields (job_title, job_company, job_company_url, job_location, job_url, job_id, posted date, employment type, workplace type, applicants count) alongside each person row. Turn off for a leaner person-only export.",
            "default": true
          },
          "deduplicate": {
            "title": "Deduplicate leads (within this run)",
            "type": "boolean",
            "description": "Remove duplicate people across jobs and searches using profile URL / profile ID and normalized name + company. Recommended ON so you are not charged for duplicates.",
            "default": true
          },
          "skipSeenLeads": {
            "title": "Skip leads delivered by previous runs",
            "type": "boolean",
            "description": "Remember every lead this actor has already delivered and return only new people on the next run. Turn this ON for scheduled runs — otherwise a daily schedule re-delivers, and re-charges for, the same recruiters every day. Suppressed leads are never pushed and never charged. It also skips re-opening jobs that a run in the last 30 days fully covered (every visible contact already delivered, or no contact at all), so a schedule spends its job budget on new postings; a contact LinkedIn adds to such a job is picked up once those 30 days pass. Requires the actor to be able to open a named key-value store; if it cannot, the run continues without cross-run memory and says so in the log.",
            "default": false
          },
          "skipProfileIds": {
            "title": "Skip these profile IDs",
            "type": "array",
            "description": "Explicit suppression list of LinkedIn profile IDs (the `<slug>` in `linkedin.com/in/<slug>`). Use when you keep your own do-not-contact list. Works with or without Skip seen leads.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "skipProfileUrls": {
            "title": "Skip these profile URLs",
            "type": "array",
            "description": "Explicit suppression list of full LinkedIn profile URLs. Tracking parameters and trailing slashes are ignored when matching.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "skipJobIds": {
            "title": "Skip these job IDs",
            "type": "array",
            "description": "Explicit suppression list of LinkedIn job IDs — leads matched to these jobs are not returned.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxJobsToInspect": {
            "title": "Max jobs to inspect",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Safety cap on job detail pages opened to look for poster / hiring-team data. Should normally be greater than or equal to Max saved leads. Most public jobs expose no hiring contact, so this is usually several times larger than the number of leads you get back.",
            "default": 250
          },
          "countryCode": {
            "title": "LinkedIn country edition",
            "enum": [
              "",
              "us",
              "gb",
              "au",
              "ca",
              "in",
              "de",
              "fr",
              "nl",
              "sg",
              "ae"
            ],
            "type": "string",
            "description": "Optional country edition used to localize searches where the public LinkedIn URL supports it. Leave as `Auto` unless you specifically need a country-scoped edition.",
            "default": ""
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}