CV.ee Scraper avatar

CV.ee Scraper

Pricing

from $1.49 / 1,000 results

Go to Apify Store
CV.ee Scraper

CV.ee Scraper

Scrape job listings from CV.ee (CV-Online Estonia). Returns structured data with salary, location, work type and apply URL. No API key required.

Pricing

from $1.49 / 1,000 results

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Extract job listings from CV.ee (CV-Online Estonia) — the leading job board in Estonia with 4,000+ active vacancies. Returns structured data including salary, location, work type, and apply URL. No API key required.

CV.ee Scraper


Why use this scraper?

  • Full dataset access — scrape all 4,000+ active Estonian job listings or filter by keyword
  • Structured salary data — numeric salaryMin / salaryMax fields, no string parsing required
  • Cross-run deduplication — 90-day fingerprint cache prevents duplicate results across consecutive runs
  • Optional HTML descriptions — enable fetchDetails to retrieve the full rich-text job description and direct apply URL
  • No API key required — runs out of the box with no credentials or registration

Input parameters

ParameterTypeDefaultDescription
keywordstring""Search keyword or job title. Leave empty to retrieve all listings.
maxItemsinteger200Maximum number of results to return. Set to 0 for unlimited.
fetchDetailsbooleanfalseFetch each vacancy's detail page for HTML description, direct apply URL, and resolved category names.
daysOldintegerOnly return listings published within the last N days.
localestring"en"Site language variant: en (English), et (Estonian), ru (Russian). Affects UI language only.
startUrlsarray[]Custom CV.ee search URLs. Overrides the keyword field when provided.

Output fields

Each result in the dataset contains:

FieldTypeDescription
jobIdstringUnique vacancy ID
titlestringJob title
companystringEmployer name
companyIdstringEmployer ID
descriptionstringPlain-text job description (always present)
descriptionHtmlstring|nullHTML description (populated when fetchDetails: true)
urlstringVacancy page URL
applyUrlstring|nullDirect apply URL (populated when fetchDetails: true; null for modal-based applications)
locationstring|nullTown name
townstring|nullTown name
countystring|nullCounty name (e.g. Harjumaa)
countrystringAlways "Estonia"
workTypesarrayWork type codes: FULL_TIME, PART_TIME, FULL_TIME_WITH_SHIFTS, FIXED_TERM, FREELANCE, PRACTICE
remoteWorkbooleanWhether remote work is available
remoteWorkTypestring|nullON_SITE, HYBRID, or FULLY_REMOTE
salaryMinnumber|nullMinimum salary (EUR)
salaryMaxnumber|nullMaximum salary (EUR)
salaryCurrencystring|nullCurrency code (EUR or null if no salary data)
salaryPeriodstring|nullmonthly or hourly
publishDatestringISO 8601 publish date
renewedDatestring|nullISO 8601 renewal date
expirationDatestring|nullISO 8601 expiration date
quickApplybooleanWhether quick apply is enabled
categoriesarrayNumeric category IDs from listing
categoriesResolvedarray|nullHuman-readable category codes, e.g. ["INFORMATION_TECHNOLOGY"] (populated when fetchDetails: true)
languagesarrayNumeric language requirement IDs
languagesResolvedarray|nullISO language codes, e.g. ["en", "et"] (populated when fetchDetails: true)
keywordsarrayEmployer-specified keywords
scrapedAtstringISO 8601 scrape timestamp

💰 Structured salary data — machine-ready

Salary is returned as numeric fields — no regex required on your end:

FieldTypeExample
salaryMinnumber | null3500
salaryMaxnumber | null5000
salaryCurrencystring | null"EUR"
salaryPeriodstring | null"monthly"

Most competing scrapers return salary as a raw string (e.g. "€3,500 – €5,000"), leaving the parsing to you. This scraper delivers numeric fields directly — ready for WHERE salaryMin > 50000 queries or salary distribution charts.


Example output

{
"jobId": "1546586",
"title": "Business Analyst (Regulatory Reporting)",
"company": "Luminor",
"companyId": "1693",
"description": "Join our team as a Business Analyst...",
"descriptionHtml": null,
"url": "https://cv.ee/en/vacancy/1546586",
"applyUrl": null,
"location": "Tallinn",
"town": "Tallinn",
"county": "Harjumaa",
"country": "Estonia",
"workTypes": ["FULL_TIME"],
"remoteWork": true,
"remoteWorkType": "HYBRID",
"salaryMin": 3200,
"salaryMax": 4000,
"salaryCurrency": "EUR",
"salaryPeriod": "monthly",
"publishDate": "2026-03-30T11:29:34.634+00:00",
"renewedDate": null,
"expirationDate": "2026-04-13T23:59:59.999+00:00",
"quickApply": false,
"categories": [7, 23, 33],
"categoriesResolved": null,
"keywords": [],
"scrapedAt": "2026-04-09T16:45:00.000Z"
}

Performance

ScenarioSpeedMemory
Keyword search, fetchDetails: false~1,000 results/min256 MB
Full site crawl, fetchDetails: false~1,000 results/min256 MB
Any search, fetchDetails: true~60 results/min256 MB

Pricing

$1.49 per 1,000 results — usage-based, no flat subscription.

Competitors charge $30–$49/month regardless of volume. With this scraper, scraping 500 results costs $0.75.


Known limitations

  • Location and work-type filtering happen client-side — the keyword field is the primary server-side filter. For location-specific searches, include the city name in your keyword (e.g. keyword: "developer Tallinn").
  • Apply URL is null for vacancies using CV.ee's built-in application modal. The vacancy url always works.
  • Categories are numeric IDs in list-only mode; enable fetchDetails: true for human-readable category names.
  • CV.ee primarily covers Estonia. International listings are limited.

Technical details

Built and maintained by unfenced-group. For custom integrations, bulk data access, or multi-country job board coverage, contact info@unfencedgroup.nl.


Part of the unfenced-group European job board scraper portfolio — 50+ job boards, one consistent output schema.