Upwork research
Search Upwork job postings and pull freelancer profiles — all as
normalized JSON from the Crawlora API, no scraping Upwork's pages by hand.
When to use this skill
- "Search Upwork for <skill/role> jobs." — free-text keyword search over
public job listings.
- "Show me this Upwork job posting." — full detail (budget, description,
client history) for one posting by id.
- "Look up this Upwork freelancer." — profile, hourly rate, Job Success
Score, ratings, and recent client feedback by freelancer id.
- "What's the going rate for on Upwork?" — collect budgets across
search results to estimate a market rate.
- "Vet this freelancer before hiring." — pull their profile and feedback
history in one call.
Setup (one-time)
- Get a free Crawlora API key (2,000 credits/mo, no card) at https://crawlora.net.
- Set
CRAWLORA_API_KEY in the environment before running the helper.
- The helper reads
CRAWLORA_API_KEY from the environment and sends requests to https://api.crawlora.net/api/v1. Missing/invalid key → 401.
How it works
- Search —
/upwork/search takes a free-text keyword (q) and returns
normalized job summaries (title, budget, experience level, duration,
posted date, description snippet, skill tags), paginated via page.
- Job detail — take an
id from a search result and call
/upwork/job/{id} for the full posting: description, employment type,
budget (hourly range or fixed amount), location/remote type, experience
level, duration, project type, proposal count, allowed applicant
countries, and a summary of the posting client (member since, location,
spend, hires, hours, industry, company size).
- Freelancer profile —
/upwork/freelancer/{id} returns a normalized
profile: name, title, verification badge, overview, hourly rate, rating
and review count, Job Success Score, location and local time, total
jobs/hours worked, and recent client feedback (title, comment, date,
client name, rating).
Full endpoint list, methods, and params: reference/endpoints.md.
Calling the API
# Search jobs by keyword:
scripts/crawlora.sh /upwork/search q="react developer" | jq '.'
# Job detail (id from a search result):
scripts/crawlora.sh /upwork/job/<job_id> | jq '.'
# Freelancer profile (id from a search result or a known profile):
scripts/crawlora.sh /upwork/freelancer/<freelancer_id> | jq '.'
Use scripts/crawlora.sh for all requests; it keeps the API key out of command-line arguments.
Endpoint reference
See reference/endpoints.md for all Upwork endpoints this skill uses.
Examples
- Freelance rate-check:
/upwork/search for a skill (e.g. q="react developer"),
collect the budget field across results to estimate a market rate for
that skill.
- Freelancer due diligence:
/upwork/search or a known id to find a
candidate, then /upwork/freelancer/{id} to check their Job Success
Score, hourly rate, hours worked, and recent client feedback before
reaching out.
Notes & limits
- Credits / pay-on-success: billed only on
2xx; free tier 2,000 credits/mo.
Key at https://crawlora.net.
- Public data only — public postings/profiles; respect Upwork's terms.
- Security: key lives in
CRAWLORA_API_KEY only — never hardcode, query-param, or commit it.
- Job and freelancer ids come from search results — grab the
id field
from /upwork/search output rather than guessing one.
- Data is sourced from Upwork's own server-rendered pages via a real
browser-rendering backend, so fields reflect exactly what's publicly
visible on the page (no data behind Upwork's login wall).
/upwork/search is paginated — pass page to walk past the first page
of results.
1---2name: upwork-research3description: Researches Upwork job postings and freelancer profiles via the Crawlora API — search Upwork's public job listings by keyword, pull full detail on a specific job posting, or look up a freelancer's profile (rate, Job Success Score, ratings, feedback) — returning clean JSON. Use when the user wants to search Upwork jobs, read a specific Upwork job posting, or research an Upwork freelancer.4---56# Upwork research78Search Upwork job postings and pull freelancer profiles — all as9normalized JSON from the Crawlora API, no scraping Upwork's pages by hand.1011## When to use this skill1213- "Search Upwork for <skill/role> jobs." — free-text keyword search over14 public job listings.15- "Show me this Upwork job posting." — full detail (budget, description,16 client history) for one posting by id.17- "Look up this Upwork freelancer." — profile, hourly rate, Job Success18 Score, ratings, and recent client feedback by freelancer id.19- "What's the going rate for <skill> on Upwork?" — collect budgets across20 search results to estimate a market rate.21- "Vet this freelancer before hiring." — pull their profile and feedback22 history in one call.2324## Setup (one-time)2526- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).27- Set `CRAWLORA_API_KEY` in the environment before running the helper.28- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.2930## How it works31321. **Search** — `/upwork/search` takes a free-text keyword (`q`) and returns33 normalized job summaries (title, budget, experience level, duration,34 posted date, description snippet, skill tags), paginated via `page`.352. **Job detail** — take an `id` from a search result and call36 `/upwork/job/{id}` for the full posting: description, employment type,37 budget (hourly range or fixed amount), location/remote type, experience38 level, duration, project type, proposal count, allowed applicant39 countries, and a summary of the posting client (member since, location,40 spend, hires, hours, industry, company size).413. **Freelancer profile** — `/upwork/freelancer/{id}` returns a normalized42 profile: name, title, verification badge, overview, hourly rate, rating43 and review count, Job Success Score, location and local time, total44 jobs/hours worked, and recent client feedback (title, comment, date,45 client name, rating).4647Full endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).4849## Calling the API5051```sh52# Search jobs by keyword:53scripts/crawlora.sh /upwork/search q="react developer" | jq '.'5455# Job detail (id from a search result):56scripts/crawlora.sh /upwork/job/<job_id> | jq '.'5758# Freelancer profile (id from a search result or a known profile):59scripts/crawlora.sh /upwork/freelancer/<freelancer_id> | jq '.'60```6162Use `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.636465## Endpoint reference6667See [`reference/endpoints.md`](reference/endpoints.md) for all Upwork endpoints this skill uses.6869## Examples7071- **Freelance rate-check:** `/upwork/search` for a skill (e.g. `q="react developer"`),72 collect the `budget` field across results to estimate a market rate for73 that skill.74- **Freelancer due diligence:** `/upwork/search` or a known id to find a75 candidate, then `/upwork/freelancer/{id}` to check their Job Success76 Score, hourly rate, hours worked, and recent client feedback before77 reaching out.7879## Notes & limits8081- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.82 Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).83- **Public data only** — public postings/profiles; respect Upwork's terms.84- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.85- **Job and freelancer ids come from search results** — grab the `id` field86 from `/upwork/search` output rather than guessing one.87- Data is sourced from Upwork's own server-rendered pages via a real88 browser-rendering backend, so fields reflect exactly what's publicly89 visible on the page (no data behind Upwork's login wall).90- `/upwork/search` is paginated — pass `page` to walk past the first page91 of results.