Back to use cases

    Use case / Marketers / Python 3 / Published

    Hiring Signals: Find Companies Hiring for the Role Your Product Helps

    Card for Hiring Signals: Find Companies Hiring for the Role Your Product Helps

    Hiring Signal Radar is a small Python script for B2B sales and growth teams. Give it one role, such as "data analyst", and it finds companies that posted for that role in the last 30 days on X and on public job boards, then scores them into a short list of accounts worth researching.

    The problem

    A company hiring for a role is often a company about to buy tools for that role. These hiring signals are public, but they are spread across X posts and job board pages, and many are old or closed. Sales teams need a fresh, company-level list, not a pile of links.

    What the app does

    • Takes a role and optional keywords to narrow the industry.
    • Finds hiring posts on X from the last 30 days.
    • Finds job pages on public job boards and reads each one.
    • Pulls company, role, location, date and open or closed status.
    • Scores each company on role match, freshness, number of roles and signal sources.
    • Writes a short accounts list and CSVs. Output is company-level only; personal handles are never saved.

    How it works

    1. X posts. GET /twitter with queries like "we're hiring" "<role>", for the last 14 days and days 15 to 30.
    2. Job pages. GET /web with site: queries for public job boards.
    3. Read. GET /web/extract as text, with an HTML read only when the text has no date.
    4. Name the company from the post or page and merge duplicates.
    5. Score and write the accounts list, CSVs, a chart and a cost log.

    The code

        def get(self, phase, path, params, timeout=120):
            t0 = time.time()
            try:
                r = requests.get(API + path, params=params, headers={"Authorization": self.key}, timeout=timeout)
                status, headers, text = r.status_code, r.headers, r.text
            except requests.RequestException as e:
                status, headers, text = 0, {}, str(e)
            try:
                body = json.loads(text)
            except ValueError:
                body = text
            rec = {"ts": dt.datetime.now(TZ).isoformat(timespec="seconds"), "phase": phase, "path": path, "params": params,
                   "status": status, "latency_s": round(time.time() - t0, 2),
                   "cost_usd": headers.get(BILL[0]), "usage": headers.get(BILL[1]), "service": headers.get(BILL[2]),
                   "currency": headers.get(BILL[3])}
            if isinstance(body, list):
                rec["items"] = len(body)
            elif isinstance(body, dict) and isinstance(body.get("data"), list):
                rec["items"] = len(body["data"])
            elif isinstance(body, str) and status == 200:
                rec["items"] = 1 if body.strip() else 0
            else:
                rec["items"] = 0
            self.calls.append(rec)
            print(f"  {rec['ts'][11:19]} {phase:8} {status} {rec['latency_s']:>6}s items={rec['items']} usage={rec['usage']} cost={rec['cost_usd']}", flush=True)
            return status, body
    

    The folder has one script, hiring_signal_radar.py, and the sample run in output/.

    Endpoints

    • GET /twitter
    • GET /web
    • GET /web/extract

    Example output

    From a run on 2026-10-10 for the role "data analyst" with a crypto keyword:

    StepResult
    X posts returned130 (123 unique, all inside the date windows)
    Posts that named a company60 of 123
    Job board results160
    Job pages read150 (21 open postings, 64 closed)

    Run it yourself

    The public examples folder linked above includes the script and a README. Install its requirements, set DESEARCH_API_KEY from console.desearch.ai, and use the run command in that README.

    Useful flags: --x-keyword (narrow X posts, for example by industry), --web-keyword (narrow job board searches), --from-raw FILE (offline, no cost).

    What it costs

    The sample run made 324 calls and cost $0.1125 in total, summed from the X-Desearch-Cost-Usd headers on 2026-10-10. It took about 5.5 minutes with 3 page readers. See pricing.

    Ideas to extend it

    • Run it weekly per role and only show new companies.
    • Join the list with your CRM to skip current customers.
    • Add more job boards with site: queries.

    Use with AI agents

    Point an MCP client at the hosted Desearch server. Replace the placeholder with a key from the console. Do not commit the key.

    {
      "mcpServers": {
        "desearch": {
          "url": "https://mcp.desearch.ai/mcp",
          "headers": {
            "Authorization": "Bearer <DESEARCH_API_KEY>"
          }
        }
      }
    }

    Prompt you can paste for this example:

    Use Desearch to find companies that posted jobs for the role I name in the last 30 days, on X and on public job pages. Return a short list with the source link for each company. Do not invent openings.

    Build your own example.

    Give your agents access to web and social search. Get an API key to start building, or talk to us about your integration.

    Read docs