TopCV Scraper
Pricing
from $2.00 / 1,000 results
TopCV Scraper
Search Vietnamese job listings on TopCV.vn by keyword and/or city and pull full job details (description, requirements, benefits, salary, employer info) -- no account or API key needed.
TopCV Scraper
Pricing
from $2.00 / 1,000 results
Search Vietnamese job listings on TopCV.vn by keyword and/or city and pull full job details (description, requirements, benefits, salary, employer info) -- no account or API key needed.
You can access the TopCV Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.0", "x-build-id": "nZTtVPh7MDjAJoI66" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/fanndev~topcv-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-fanndev-topcv-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } }, "/acts/fanndev~topcv-scraper/runs": { "post": { "operationId": "runs-sync-fanndev-topcv-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor and returns information about the initiated run in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/runsResponseSchema" } } } } } } }, "/acts/fanndev~topcv-scraper/run-sync": { "post": { "operationId": "run-sync-fanndev-topcv-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } } }, "components": { "schemas": { "inputSchema": { "type": "object", "required": [ "mode" ], "properties": { "mode": { "title": "Mode", "enum": [ "search", "detail" ], "type": "string", "description": "\"search\" runs a keyword/city job search and (by default) hydrates each result into a full job record. \"detail\" fetches full detail for specific job ID(s)/URL(s) directly.", "default": "search" }, "keyword": { "title": "Keyword", "type": "string", "description": "\"search\" mode -- free-text job title/keyword search (e.g. \"python\", \"kế toán\", \"nhân viên bán hàng\"). Leave empty (with a city, or entirely) to list all currently active postings, newest first." }, "city": { "title": "City / province", "type": "string", "description": "\"search\" mode -- optional. A Vietnamese province/city name or slug as used on topcv.vn, e.g. \"Hà Nội\", \"ha-noi\", \"Hồ Chí Minh\", \"ho-chi-minh\", \"Đà Nẵng\". Combined with \"keyword\" when both are given." }, "maxResults": { "title": "Max results", "minimum": 1, "maximum": 2000, "type": "integer", "description": "\"search\" mode -- maximum number of job listings to return. Pagination is followed automatically until this cap or the end of the result set.", "default": 50 }, "fetchFullDetails": { "title": "Fetch full details for each result", "type": "boolean", "description": "\"search\" mode -- when on (default), each search result is hydrated into a full job record (description, requirements, benefits, salary, employer info) with one extra request per job. Turn off for faster/cheaper runs that only need the compact search-result fields (title, company, location, salary label, tags, posted date).", "default": true }, "jobId": { "title": "Job ID or URL", "type": "string", "description": "\"detail\" mode -- a single job's numeric ID or the full topcv.vn/viec-lam/.../<id>.html URL." }, "jobIds": { "title": "Job IDs or URLs", "type": "array", "description": "\"detail\" mode only -- multiple job IDs/URLs to fetch full detail for in one run.", "items": { "type": "string" } }, "maxConcurrency": { "title": "Max concurrent workers", "minimum": 1, "maximum": 16, "type": "integer", "description": "How many detail requests to run in parallel (used in \"search\" mode when hydrating results, and in \"detail\" mode across multiple IDs).", "default": 4 }, "proxyConfiguration": { "title": "Proxy configuration", "type": "object", "description": "Apify Proxy configuration. Residential is on by default.", "default": { "useApifyProxy": true, "apifyProxyGroups": [ "RESIDENTIAL" ] } } } }, "runsResponseSchema": { "type": "object", "properties": { "data": { "type": "object", "properties": { "id": { "type": "string" }, "actId": { "type": "string" }, "userId": { "type": "string" }, "startedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "finishedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "status": { "type": "string", "example": "READY" }, "meta": { "type": "object", "properties": { "origin": { "type": "string", "example": "API" }, "userAgent": { "type": "string" } } }, "stats": { "type": "object", "properties": { "inputBodyLen": { "type": "integer", "example": 2000 }, "rebootCount": { "type": "integer", "example": 0 }, "restartCount": { "type": "integer", "example": 0 }, "resurrectCount": { "type": "integer", "example": 0 }, "computeUnits": { "type": "integer", "example": 0 } } }, "options": { "type": "object", "properties": { "build": { "type": "string", "example": "latest" }, "timeoutSecs": { "type": "integer", "example": 300 }, "memoryMbytes": { "type": "integer", "example": 1024 }, "diskMbytes": { "type": "integer", "example": 2048 } } }, "buildId": { "type": "string" }, "defaultKeyValueStoreId": { "type": "string" }, "defaultDatasetId": { "type": "string" }, "defaultRequestQueueId": { "type": "string" }, "buildNumber": { "type": "string", "example": "1.0.0" }, "containerUrl": { "type": "string" }, "usage": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "integer", "example": 1 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 } } }, "usageTotalUsd": { "type": "number", "example": 0.00005 }, "usageUsd": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "number", "example": 0.00005 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for TopCV Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: