More screenshots

    Works with the AI Agents you already use

    Claude CodeClaude CodeCursorCursorCodex CLICodex CLIMuseMuseDotsDots+22 more

    Jobstitch: free job sources merged into one clean feed

    1

    Adapters for official job APIs and public ATS boards, with a terms card per source, cross-source dedupe, ghost job expiry, backoff and a health table that marks a dead source down instead of hiding it.

    $15

    Secure checkout via Stripe

    Money-back guarantee

    Converts to your local currency at checkout

    Security scanned
    Jobstitch: free job sources merged into one clean feed

    Jobstitch: free job sources merged into one clean feed

    Example session with this skill installed

    Jobstitch: set up batch ingest from Greenhouse, Lever, Himalayas and Jobicy for our board, dedupe across them, and keep Careerjet as live search. Show me source health.

    • Read your context and instructions
    • Compiled the jobstitch

    Registry updated: 5 terms cards (4 batch, 1 live). Example data from a test run.

    Source health (source_runs, latest run)

    SourceModeFetchedValidRejectedStatus
    greenhousebatch4124057ok
    leverbatch2382317ok
    himalayasbatch1801764ok
    jobicybatch1501500ok
    careerjetlive000down: missing_env

    Feed

    • Valid rows: 962. Cross-source collisions merged: 41, leaving 921 jobs. Direct ATS rows kept the apply URL.
    • Expiry: 18 closed (missing from the Greenhouse or Lever snapshot), 3 flagged as reposts and down-ranked.
    • Rejected 18 rows, mostly missing URL. No postedAt defaulted to now.
    • Second run: 0 new duplicates.

    Alerts

    • careerjet: CAREERJET_API_KEY not set, marked down. Search response returns sourceStatus: { careerjet: "down" } and the UI shows "1 source unavailable". No mock jobs served.

    Next steps

    • Add the Careerjet key and confirm the live search passes the real client IP and user agent.
    • Show Himalayas and Jobicy attribution on job cards.
    • Add retention for source_runs in the scheduled job.

    Connects securely to your tools. The creator never sees your data.

    About this skill

    A job feed built from several sources goes bad quietly. The same opening shows up three times, old postings rank as fresh because a missing date became "now", and a source that lost its API key returns nothing for weeks while the UI looks normal. Jobstitch pulls listings from free official APIs and public ATS boards into one normalized, deduped feed, with a health record per source so a dead source is marked down instead of hidden.

    What it does

    • Terms-first sources: Careerjet, Jooble, Greenhouse, Lever, Ashby, Himalayas, Jobicy and RemoteOK, each with a terms card (endpoint, checked date, attribution, link and cache rules). Portal scraping is excluded.
    • One adapter contract: every source returns the same NormalizedJob shape or a typed error such as missing_env or rate_limited.
    • Honest normalization: unknown dates, salaries and currencies stay null; ids come from the source, never random.
    • Cross-source dedupe: a key from company, title, country and city; the direct ATS row wins the apply URL.
    • Ghost job expiry: hides expired, older than 30 days (tunable) and closed rows, and down-ranks reposts.
    • Health and degraded mode: a source_runs table, alerts on failure or a drop in valid rows, and "1 source unavailable" in the UI instead of mock jobs.

    How it works

    1. Pick sources by licence; write each terms card in a sources.ts registry.
    2. Build one adapter per source, then normalize and dedupe.
    3. Back off: timeouts, Retry-After, backoff with jitter, max 3 tries.
    4. Store and schedule: upsert with source_url and fetched_at; batch on cron, live per search.
    5. Record health every run and degrade in the open.

    Frameworks & tools

    The official APIs above, with Supabase, Vercel cron and Next.js route handlers as defaults, not requirements.

    Why this beats prompting it yourself

    A quick prompt writes a scraper and a catch-all that returns demo data. This skill encodes per-source rules (Careerjet needs the real user IP and agent, Jooble's free key is 500 lifetime requests, Jobicy shows only 7 days so absence is not closure) and treats a missing key as an outage.

    Use cases

    • Job boards and aggregators merging free sources.
    • Matching apps that need stored, dated job rows.
    • Adding a new source with tests.

    Known limitations

    No scraping of job portals or social networks, no paid data feeds, and not for one-off research datasets. Source terms and endpoints change, so the registry dates must be re-checked when a source starts failing.

    How to use

    Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.

    Reviews

    No reviews yet

    Be one of the first to try it. Every listed skill passes our trust checks below.

    Security scanned

    Passed our 8-point scan before listing

    Fresh listing

    Recently published to Agensi

    Money-back guarantee

    Doesn't do what its page promises? You get your money back.

    Trust & safety

    Security scanned

    Verified clean 1 day ago

    • Passed all security checks, Safe to install

    Requires

    Careerjet API
    Jooble API
    Greenhouse Job Board API
    Lever Postings API
    Ashby Job Posting API
    Himalayas API
    Jobicy API
    RemoteOK API
    Supabase
    Vercel cron

    Listed1 day ago

    What's inside

    Frequently Asked Questions