Job Opportunities API

Check the data. Then trust it.

Job Opportunities API for Pipedream

Fetch jobs in a Pipedream workflow with one HTTP action or a short Node.js step.

  • Official
  • Open source
  • No code

A Pipedream account (free to build and test)

Set it up in 4 steps

You need a free API key (no card) — get one here.

  1. Store the key as an environment variable

    In Pipedream's Settings → Environment Variables, add JOA_API_KEY with your free key. Workflows read it as process.env.JOA_API_KEY; it never appears in the workflow itself.

  2. Trigger: Schedule

    Create a workflow with the Schedule trigger, for example once a day.

  3. Step: fetch the jobs

    No code: add HTTP / Webhook → Send any HTTP Request with GET https://api.jobopportunitiesapi.org/v1/jobs, the query parameters you need, and the header Authorization: Bearer {{process.env.JOA_API_KEY}}. Or add a Node.js code step and paste this (tested against the live API):

    Node.js code step
    export default defineComponent({
      async run({ steps, $ }) {
        const params = new URLSearchParams({ country: "DE", q: "engineer", remote: "remote,hybrid", limit: "20" });
        const res = await fetch(`https://api.jobopportunitiesapi.org/v1/jobs?${params}`, {
          headers: { Authorization: `Bearer ${process.env.JOA_API_KEY}` },
        });
        if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
        const { data } = await res.json();
        $.export("$summary", `Fetched ${data.length} jobs`);
        // One object per job; keep attribution and show it with the listing when present.
        return data.map(({ title, company, location, apply_url, posted_at, attribution }) =>
          ({ title, company, location, apply_url, posted_at, attribution }));
      },
    });
  4. Use the result

    The step returns one object per job. Reference it in later steps as steps.<step_name>.$return_value, for example to post each new role to Slack or insert it into a database.

STEP 1ScheduleDailySTEP 2Node.js / HTTPGET /v1/jobs, key fromprocess.envSTEP 3Any appSlack, Sheets, Postgres …STEP 1ScheduleDailySTEP 2Node.js / HTTPGET /v1/jobs, key from process.envSTEP 3Any appSlack, Sheets, Postgres …
Diagram (not a screenshot): the workflow's steps.

Example: for job boards

A board backed by Postgres runs the step nightly and inserts the returned jobs with ON CONFLICT on the job id, keeping apply_url as the apply link and showing attribution whenever it is present.

Example: for AI agents

Return the jobs from the code step and pass them to an AI step that drafts a digest per team, or expose the workflow as an HTTP endpoint that an agent calls with its own filters.

Questions

Straight answers about plans, metering and what to show.

How is usage counted?

Every job row the API returns counts against your plan's monthly record allowance, exactly as a direct API call would. The free key has a small monthly allowance and needs no card, so start with small page sizes and a daily schedule rather than polling every few minutes. Your key's largest page size is in GET /v1/me (limits.max_page_size).

Where do I get an API key?

At jobopportunitiesapi.org/register. The Explore key is free and needs no card. Keep it in your tool's credential store or an environment variable, never in a shared file.

Where do applicants apply?

On the employer's own site. Every job carries apply_url, the employer's application page or applicant-tracking-system link. Job Opportunities API never sits between the candidate and the employer, so always use apply_url as the apply button.

Do I need to show any attribution?

Yes, one line where listings are shown publicly: a visible credit "Data: Job Opportunities API" linking to https://jobopportunitiesapi.org (see /terms — storing, displaying, reselling and redistributing within your key's plan limits are all allowed). In addition, jobs listed through Erioun for Teams carry an attribution field (for example "via Erioun for Teams") and a canonical_url: when attribution is present, show it with the listing and link to canonical_url.

See all integrations

Get a free API key

No card. The same key works for every integration on this site.

Get a free key →