Remote Jobs Scraper: Jobicy & We Work Remotely API avatar

Remote Jobs Scraper: Jobicy & We Work Remotely API

Pricing

from $0.80 / 1,000 jobs

Go to Apify Store
Remote Jobs Scraper: Jobicy & We Work Remotely API

Remote Jobs Scraper: Jobicy & We Work Remotely API

Aggregate remote jobs from Jobicy and We Work Remotely with salary data, source attribution, deduplication and alerts for new jobs.

Pricing

from $0.80 / 1,000 jobs

Rating

0.0

(0)

Developer

Ad Astra Connect

Ad Astra Connect

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

Remote Jobs Scraper API

Collect remote job postings from Jobicy and We Work Remotely in one normalized dataset. This remote jobs scraper API combines public JSON and RSS feeds, removes matching employer/title duplicates across boards, keeps source attribution and original apply links, and supports scheduled new job alerts. Export jobs for a career dashboard, research workflow or remote job discovery service.

Remote job boards and coverage

SourcePublic interfaceRefresh policy
JobicyOfficial public jobs APIAt most one synchronization pass per hour; results are delayed by approximately three hours and limited to a seven-day publication window
We Work RemotelyOfficial public RSS feedSuccessful results cached for one hour; failed passes recover after five minutes; recent feed items only

Himalayas, Remotive and Arbeitnow are excluded because their current terms or robots rules restrict this use. They cannot be enabled through input. No API keys or accounts are needed for the supported feeds.

What data can you get from the remote jobs API?

FieldContents
id, sourceSource-prefixed posting identifier and board name
title, company, companyUrlRole, employer and public company homepage when supplied
category, tags, jobTypeSource categories, tags and employment type
remoteRegion, locationRestrictionsPublished remote eligibility, without assuming every remote role is worldwide
salaryMin, salaryMax, salaryCurrency, salaryIntervalPosted salary only; missing or ambiguous values are null
postedAtPublication date in UTC when available
applyUrl, sourceUrl, attributionOriginal board posting links and source credit
firstSeenAtFirst emitted time for a new posting in monitor mode
descriptionOptional plain text, privacy-redacted and truncated to 3,000 characters

Recruiter, author and applicant fields are excluded. Descriptions are off by default. Automated name redaction checks titles, categories, locations, descriptions and URL paths, but can miss unfamiliar names or remove legitimate words. Public employer names are preserved; email addresses and phone numbers are still scrubbed from employer labels.

How to use the remote jobs scraper

  1. Keep the two verified sources selected for a quick test.
  2. Set maxResults to 30, or use the small prefilled input.
  3. Add keywords, categories or a remote region if needed.
  4. Run the Actor and open the dataset's Remote jobs overview.
  5. Download JSON, CSV or Excel, or read the dataset through the Apify API. Check RUN_SUMMARY for cache age, skipped sources and coverage limits.
{
"sources": ["jobicy", "weworkremotely"],
"keywords": [],
"excludeKeywords": [],
"categories": [],
"remoteRegion": "",
"minSalary": 0,
"postedWithinDays": 0,
"maxResults": 30,
"monitorMode": false,
"includeDescription": false
}

maxResults defaults to 100. Include keywords use OR within the list; exclusions take priority. Keywords search titles, employer labels, categories and tags, not descriptions. Category matching is case insensitive and uses source labels or tags.

A remoteRegion of worldwide requires explicit worldwide eligibility. usa and europe match recognized eligibility labels, and explicitly worldwide roles also match country searches. Geography is a text filter, not a work authorization determination.

minSalary compares the posted lower bound in its original currency and interval. It does not convert hourly pay to annual pay or currencies. Missing lower bounds fail an enabled salary filter. postedWithinDays excludes unknown dates when enabled.

Remote job sample output

These are selected fields from a real posting. Full rows also retain the original posting URLs and required attribution.

SourceTitleCompanyRemote regionJob type
JobicyAdoption Strategist - APACElevenlabsSingaporeFull-Time
{
"id": "jobicy:156604",
"source": "jobicy",
"title": "Adoption Strategist - APAC",
"company": "Elevenlabs",
"companyUrl": null,
"category": ["Customer Support & Success"],
"tags": [],
"jobType": "Full-Time",
"remoteRegion": "Singapore",
"locationRestrictions": ["Singapore"],
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": null,
"salaryInterval": null,
"postedAt": "2026-10-23T13:48:16.000Z"
}

Pricing

Planned price: $1.00 per 1,000 jobs. The final price is shown on the Store page. Each dataset row uses one job billing event, plus the platform apify-actor-start event per run where configured. The startup charge counts toward the total spending limit. No pricing is configured by this source project. Cross-board duplicates removed before output and monitor rows suppressed as already seen do not create billable rows. Ordinary repeated exports can emit and bill the same jobs again. The Actor stops gracefully when the spending limit is reached.

Incremental runs / monitoring for new job alerts

Enable monitorMode and reuse the same monitorKey with the same filters. The first run emits current matching jobs up to maxResults. Later runs emit only matching employer/title combinations not previously emitted in that monitor. Rows include firstSeenAt. When a cap prevents output, remaining jobs can appear on a later run; they are not silently marked seen.

State lives in the named key-value store remote-jobs-aggregator-state, separate from the default dataset. A new monitorKey, a filter change or deleting this named store starts a fresh monitor. Changing caps, source selection or description options preserves the existing monitor scope. Do not purge the named store between scheduled runs.

Cross-board deduplication uses normalized employer and title. The first source wins and retains its own attribution. A changed source identifier or edited description does not trigger an alert for the same employer/title. Roles with the same employer/title can be merged even when their locations differ. This detects newly discovered roles, not edits, closures or individual requisitions with identical titles. State is retained until you reset it.

Scheduling and integrations

Use Apify schedules for hourly or daily checks. Run sequentially and prevent overlapping runs that share the named cache or monitor store. Connect datasets and webhooks to Make, Zapier or n8n, use the Apify API from your application, or connect MCP tools for AI agents. This Actor produces job rows; it does not send messages itself. Build alert delivery in your chosen integration.

This is not legal advice.

The Actor uses official public feeds without login, cookies, proxies or browsers, checks robots.txt, and preserves source credit. Users are responsible for their use and any downstream publication. Keep visible source attribution and a link to the original board posting whenever you display a result. Apply buttons must use the returned applyUrl, including Jobicy's original board link. No personal profiles or application data are collected. Do not use job descriptions as a contact directory.

Remote jobs API limitations

  • Results are a bounded recent window, not every remote vacancy. Jobicy defaults to one page; We Work Remotely has one RSS feed. windowCapped in RUN_SUMMARY indicates additional items may exist.
  • maxPagesPerSource can increase a Jobicy pass to five sequential cursor pages. Default one keeps startup quick. Host requests are spaced by at least 750 ms or the robots crawl delay, whichever is longer.
  • An hourly source cache is shared across filters and monitor names. Changing maxResults or page depth cannot expand a cached window until its next refresh. A failed refresh uses a five-minute cooldown. Jobicy also retains its hourly limit on starting a new pass, including after a failure or crash. WWR reservations abandoned by a crashed run expire after five minutes; legacy reservations retain their original expiry. Runs finding a parallel refresh wait up to 10 seconds for its result, then report that source as cooldown.
  • Each source gets at most one retry total across robots checks and feed pages for network errors, timeouts, HTTP 429 or HTTP 5xx, with a three-second backoff or Retry-After capped at 10 seconds. HTTPS requests use a fixed source host allowlist, 20-second request timeouts, 8 MiB feed bodies and 512 KiB policy bodies. A 45-second collection budget also bounds normal runs.
  • Shared KV reservations provide best effort coordination, without atomic locking. After reserving, a run waits a random 200 to 600 ms and re-reads ownership before fetching; a run that loses ownership waits for the other result. Configure overlapping schedules and tasks to run sequentially to avoid duplicate source polling.
  • The cache contains bounded, normalized, redacted rows, including descriptions. Raw API bodies are not persisted. includeDescription only controls dataset output.
  • Sources can delay, remove or change listings. Hourly polling can miss jobs that appear and disappear between checks. Missing salary, homepage, tags or publication dates remain empty or null.
  • The Actor divides the output budget across the sources in input order. Filters, duplicates or sparse feeds can produce fewer rows than the cap.
  • Redaction is best effort and may produce false positives in prose. Employer names intentionally skip person-name detection; contacts are still scrubbed. Keep descriptions disabled for the smallest output and review any prose before publishing it.

FAQ

When all sources are unavailable, the run returns 0 rows with no job charge; only the configured Actor start charge may apply. Check the status message and RUN_SUMMARY for the next refresh time. Jobicy can require waiting until the next hour. Parsing and normalization errors are highlighted in the status message and can require a code fix.

Can I scrape Himalayas, Remotive or Arbeitnow too?

No. Those candidates were dropped during terms and robots verification. Only Jobicy and We Work Remotely are accepted.

Why did a repeat run return zero jobs?

In monitor mode, all current matching postings may already be seen. Filters can also remove every candidate. Zero matches and temporarily unavailable sources return a successful run. Inspect RUN_SUMMARY.

Why are some salaries null?

Many listings do not disclose pay. A currency symbol alone may be ambiguous, and the Actor does not infer salary or exchange rates. Intervals reflect the source posting.

Set includeDescription for a redacted excerpt up to 3,000 characters. Apply links stay on the original job board to preserve source requirements. The Actor does not bypass those links or request authenticated APIs.

Can I reset the source polling limit by changing my monitor name?

No. The polling cache is shared across monitor names. Its next refresh time is recorded in each source summary. Keep scheduled runs sequential.

Support

Report reproducible problems through this Actor's Issues tab on Apify. Include the input and run ID without personal information.

Jobicy, We Work Remotely, Himalayas, Remotive, Arbeitnow, ElevenLabs, Excel, Apify, Make, Zapier and n8n are trademarks of their respective owners. This Actor is not affiliated with, endorsed or sponsored by any of these companies or projects.