RemoteOK Jobs Scraper: New Remote Jobs Alerts, No Login avatar

RemoteOK Jobs Scraper: New Remote Jobs Alerts, No Login

Pricing

from $0.50 / 1,000 job posting returneds

Go to Apify Store
RemoteOK Jobs Scraper: New Remote Jobs Alerts, No Login

RemoteOK Jobs Scraper: New Remote Jobs Alerts, No Login

Scrape RemoteOK without login: remote jobs for a list of keywords with title, company, location, salary if listed and apply link. Keep only jobs posted after a date, or get new remote jobs alerts with only new postings since your last run. Send rows to Google Sheets. Charged per posting.

Pricing

from $0.50 / 1,000 job posting returneds

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

RemoteOK Jobs Lookup

You paste a list of search keywords — a skill, a role, a tool. For each one, this actor searches RemoteOK's live remote-job feed and returns every matching posting — title, company, location, salary if listed, and the apply link — as one row per posting. No API key, no HTML scraping: it reads RemoteOK's own public JSON feed directly. Optional filters narrow results by job title, hiring location, or posting date, and an optional delta mode returns only the postings that appeared since your last run, so you can put a keyword list on a schedule and get a "new postings" alert instead of a full re-dump every time.

Who it's for

Sourcers, recruiters, and outbound teams building a remote-role candidate or lead list, and anyone watching a niche (a skill, a title, a tool) for new remote openings without checking a job board by hand. Pricing is pay-per-event and per-posting: a fraction of a cent per returned row, and nothing for a keyword with no matches, so a broad watchlist costs you next to nothing when it's quiet.

Why this one

  • Direct from RemoteOK's own public feed. No HTML scraping to break on a redesign — this calls remoteok.com/api the same JSON endpoint the site's own pages are built from.
  • You pay per posting returned, not per search. A keyword that matches 40 postings and one that matches 2 both bill only for the postings actually delivered — a keyword with zero matches is a free miss.
  • Honest about the source's own limits. RemoteOK's tag index is loosely curated — see "Tips" below — so this actor gives you a title-keyword filter to get precise results instead of quietly pretending the raw tag match is exact.
  • A delta mode for watching a niche over time. Turn on onlyNewSinceLastRun, put the actor on a schedule, and every run after the first returns only postings you haven't seen — a quiet week still gets a row, so you can tell "nothing new" from "the run broke."

What you get

One row per matching job posting by default (toggle "One row per job posting" off in the Input tab to get one row per search keyword instead, with the full list nested in jobs). Every row carries these fields, whether or not you've turned on filters or delta mode — the columns never move:

FieldType / formatDescription
querytextThe search keyword you passed in, unchanged.
foundbooleantrue if the keyword matched at least one RemoteOK posting, false otherwise.
statustextOK or NOT_FOUND (no postings currently match this keyword).
searchTagtextThe keyword actually searched (lowercased).
jobCountnumberHow many postings matched, after your filters (and after delta filtering, if onlyNewSinceLastRun is on).
totalJobCountnumberHow many postings RemoteOK's own tag search returned before any filtering — lets you see what a filter dropped.
newJobsnumberHow many postings are new since your last scheduled run. Empty unless onlyNewSinceLastRun is on.
firstRunbooleantrue if this was the baseline run for this watchlist. Empty unless onlyNewSinceLastRun is on.
jobsarrayThe full list of matching postings, each with the fields below. Present in every row; it's what gets expanded into separate rows in "one row per posting" mode.
titletextJob title.
companytextHiring company.
tagsarrayRemoteOK's own tags for the posting — see "Tips" for why these are noisy.
locationtextWhere the employer is willing to hire from, as RemoteOK lists it. Empty for a fully "work from anywhere" posting.
salaryMin / salaryMaxnumber (USD)Only present when the poster listed a range — most postings don't.
postedAtdate (ISO)When RemoteOK published the posting.
applyUrllinkLink to apply.
descriptiontext (HTML)The posting's full description, as RemoteOK returns it (raw HTML, not stripped).
scrapedAtdate (ISO)When this actor fetched the row.

A keyword with no current matches still comes back as one row with found: false, and that row is never charged.

Pricing

  • Job posting returned: $1 per 1,000 job postings

Plus a $0.00005 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.

How to use

  1. In the Apify Console. Open the actor page and click Start — the keywords field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~remoteok-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"keywords":["kubernetes"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Paste one search keyword per line — a skill (python), a role (marketing), or a tool (kubernetes). Each keyword is matched against RemoteOK's own tag search.

To narrow the postings you get back, open the 🎯 Job filters section of the Input tab. All of these are optional and combine with AND across fields, OR within a field:

InputWhat it does
titleKeywordsKeep only postings whose title contains at least one of these — ["engineer","designer"]. Recommended: RemoteOK's tag matching is loose (see Tips below), so this is the reliable way to get precise results.
excludeTitleKeywordsDrop postings whose title contains one of these — ["intern","unpaid"]. Applied after titleKeywords.
locationsKeep only postings whose hiring-location field contains one of these — ["United States","Europe"]. Drops "work from anywhere" postings (no location listed) — leave empty to keep them.
postedAfterKeep only postings published on or after this date — "2026-06-01".

Leave every filter empty and you get every posting RemoteOK's tag search returned for that keyword, exactly as before filters existed. jobCount (matched) and totalJobCount (before filtering) both come back on every row, so a filtered result is never ambiguous.

For a standing watchlist, turn on onlyNewSinceLastRun in the 🔁 Watch for new postings section and put the actor on a schedule. The first run baselines (returns everything matching your filters, firstRun: true); every run after that returns only postings it hasn't shown you before, counted in newJobs. A quiet run still returns a row per keyword (jobCount: 0, newJobs: 0) so you can tell "nothing new" from "the run failed."

Input

{
"keywords": [
"kubernetes"
]
}

One per line. Matched against RemoteOK's tag index. Add a "Job title must contain" filter below for tighter, title-verified results.

Sample output

queryfoundstatussearchTagjobCounttotalJobCountnewJobsfirstRunjobstitlecompanytagslocationsalaryMinsalaryMaxpostedAtapplyUrldescriptionscrapedAt
pythontrueOKpython100100<all matching postings (full list)>DESARROLLADOR FULL STACKKruger NearShore LLC - Rekluti["full stack","front end","python","dev","testing","web dev","quality assurance","devops","c","cloud","nosql","git","flutter","angular","mobile","golang","backend","digital nomad"]2026-08-22T00:00:12+00:00https://remoteOK.com/remote-jobs/remote-desarrollador-full-stack-kruger-nearshore-llc-rekluti-1137062

Desarrollador/a Full Stack – Python / Angular / Go

En Rekluti, consultora especializada en talento tecnológico en LATAM, buscamos un/a Desarrollador/a Full Stack para integrarse a proyectos de alta complejidad y participar en el desarrollo de soluciones web escalables.

Buscamos un perfil con sólida experiencia en Python, Angular y Go, capaz de desenvolverse de manera autónoma, aportar en decisiones técnicas y colaborar con equipos multidisciplinarios.

🎯 Principales responsabilidades

  • Diseñar, desarrollar y mantener aplicaciones Full Stack, participando en frontend y backend.

  • Desarrollar servicios y APIs REST utilizando principalmente Python y Go.

  • Construir y mantener interfaces web modernas con Angular.

  • Participar en el diseño de arquitecturas y definición de soluciones técnicas.

  • Integrar servicios, APIs y diferentes componentes de la plataforma.

  • Desarrollar código limpio, mantenible, escalable y de alta calidad.

  • Participar en revisiones de código, testing y resolución de incidencias.

  • Colaborar con equipos de Producto, QA, DevOps y otros perfiles técnicos.

  • Contribuir a la mejora continua de procesos y buenas prácticas de desarrollo.

  • Trabajar con servicios cloud y ambientes desplegados sobre Google Cloud Platform (GCP).

  • Participar eventualmente en iniciativas de desarrollo mobile utilizando Flutter.

💻 Requisitos

  • 5+ años de experiencia en desarrollo de software.

  • Experiencia sólida como Full Stack Developer.

  • Dominio avanzado de Python, especialmente para desarrollo backend.

  • Experiencia sólida con Angular para desarrollo frontend.

  • Experiencia profesional con Go (Golang) en desarrollo de servicios y aplicaciones.

  • Experiencia construyendo APIs REST, microservicios e integraciones.

  • Conocimientos de bases de datos SQL y/o NoSQL.

  • Experiencia trabajando con Git y metodologías ágiles.

  • Conocimientos de GCP y servicios cloud.

  • Nociones o experiencia previa con Flutter.

  • Capacidad de análisis y resolución de problemas complejos.

  • Buenas habilidades de comunicación y trabajo colaborativo.

🌎 Condiciones de la posición

  • Modalidad: 100% remoto.

  • Ubicación: LATAM.

  • Contratación: Contractor.

  • Pago: En USD.

  • Idioma: 🇪🇸 100% en español. No se requiere inglés para esta posición.

Si eres un/a desarrollador/a Full Stack con experiencia en Python, Angular y Go y estás buscando un nuevo reto profesional trabajando de forma remota desde LATAM, ¡queremos conocerte! 🚀





Please mention the word ILLUMINATE and tag RMTA3LjE3NS44MC4yMDY= when applying to show you read the job post completely (#RMTA3LjE3NS44MC4yMDY=). This is a beta feature to avoid spam applicants. Companies can search these words to find applicants that read this and see they're human.
2026-09-08T07:00:30.279Z

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~remoteok-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"keywords":["kubernetes"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~remoteok-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"keywords":["kubernetes"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~remoteok-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"keywords":["{{search keyword}}"]}, mapping the row's search keyword into the keywords array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "RemoteOK Jobs Lookup | Apify" — the agent will find and run this actor.

Tips

  • Add a titleKeywords filter for precision. RemoteOK's tag index is self-selected by posters and loosely curated — verified live: a search for javascript returned 100 postings carrying a literal "javascript" tag, but 0 of them had a JavaScript-relevant title. Set titleKeywords to the words you'd actually expect in a matching job title to cut through this.
  • Put delta mode on a daily or weekly schedule for a niche-hiring alert. onlyNewSinceLastRun plus a fixed keyword list turns this into a "new remote roles for X" feed — you only see what's new since last time, and a quiet day still confirms the schedule is running.
  • salaryMin/salaryMax are usually empty. Most RemoteOK postings don't list a range; treat a present value as a bonus, not something to filter on by default.
  • Every result is already remote. There's no remoteOnly filter here (unlike this catalogue's ATS actors) because every RemoteOK posting already is one — locations filters where the employer is willing to hire from, not remote-vs-onsite.

FAQ

Why does found say false, or a row come back empty? The keyword currently matches zero postings in RemoteOK's tag search (status: NOT_FOUND). Try a broader or different keyword.

Was I charged for that row? Only for postings actually returned — jobCount postings per keyword found, at the per-posting price. A keyword matching zero postings is free.

I got charged for a keyword that returned jobCount: 0 — why? That can only happen with filters or delta mode: RemoteOK's tag search found postings (totalJobCount > 0), but your titleKeywords/locations/postedAfter filtered all of them out, or none were new since your last delta run. Zero rows means zero charge either way — this question only applies to the "one row per keyword" display mode, where a keyword still gets a summary row even when its jobs list is empty.

Why are the tag matches sometimes irrelevant to my keyword? See "Tips" above — RemoteOK's own tag index is loosely curated. Use titleKeywords for a title-verified result.

How does the delta / "new since last run" state work, and can I reset it? It lives in a named key-value store, remoteok-jobs-lookup-state, inside your own Apify account. Delete that store to reset every watchlist. Changing your filters also starts a fresh watchlist automatically, since filter values are part of what identifies a given seen-list.

Does this actor hit rate limits? It calls RemoteOK's public JSON API once per keyword, with its own timeout and retry handling. No proxies are needed — the endpoint is public and unauthenticated.

Can an AI agent call this directly? Yes — it's registered with the Apify MCP server. See "Use it from Clay, n8n, Make, or an AI agent" above.


Data sourced from RemoteOK's public API. Per RemoteOK's API terms, this actor and its output link back to remoteok.com and credit RemoteOK as the source — please do the same if you republish results.