[ HRVST ]
// referencia

API Reference

The Hrvst API lets you submit scraping jobs, poll their status, and retrieve results programmatically. All endpoints return JSON. Base URL: https://hrvst.donostia.ai

Authentication

All API endpoints require a valid API key. Generate one from your account settings.

Pass the key in the Authorization header:

Authorization: Bearer hv_your_api_key_here

API keys have the format hv_ + 64 hex characters. Email verification is required before API keys work.

Credits

Hrvst is pay-per-use. You buy credits and spend them on jobs. Credits never expire.

ScraperCostUnit
google-maps3 creditsper record
google-maps-reviews2 creditsper review
google-search1 creditper result
emails-contacts2 creditsper contact
amazon-products3 creditsper product
amazon-reviews2 creditsper review
hrvst-agentvariableon unlock

New accounts start with 100 free credits. First 2 hrvst-agent unlocks are always free.

Errors

All errors follow the same shape:

{ "error": "description of what went wrong" }
StatusMeaning
400Bad request — missing or invalid field
401Unauthorized — missing or invalid API key
402Payment required — insufficient credits
404Not found — job doesn't exist or belongs to another user
429Rate limit exceeded — includes Retry-After header
500Server error

Rate Limits

100 requests per minute per API key. Rate limit headers are included in every response:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1678456800

POST/api/jobs

Create and enqueue a new scraping job. Returns immediately — poll the job ID to check completion.

Request

curl -X POST https://hrvst.donostia.ai/api/jobs \
  -H "Authorization: Bearer hv_..." \
  -H "Content-Type: application/json" \
  -d '{
    "scraperSlug": "google-maps",
    "name": "Restaurantes Madrid",
    "params": {
      "query": "restaurantes en Madrid",
      "limit": 20,
      "language": "es",
      "country": "ES"
    }
  }'

Body fields

FieldTypeDescription
scraperSlugstringRequired. One of the scraper slugs listed below.
namestringRequired. A label for this job (shown in dashboard).
paramsobjectRequired. Scraper-specific parameters — see reference below.

Response — 201 Created

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "userId": "user-id",
  "scraperSlug": "google-maps",
  "status": "PENDING",
  "params": { "query": "restaurantes en Madrid", "limit": 20 },
  "results": null,
  "creditsUsed": 0,
  "error": null,
  "createdAt": "2026-03-12T10:30:45Z",
  "updatedAt": "2026-03-12T10:30:45Z",
  "completedAt": null,
  "unlockCost": 0,
  "unlockedAt": null,
  "freeUnlock": false
}

GET/api/jobs

List all jobs for the authenticated user, newest first.

Query params

ParamDefaultDescription
page1Page number (1-indexed).
limit20Results per page. Max 100.
{
  "jobs": [ ... ],
  "total": 42,
  "page": 1,
  "limit": 20,
  "total_returned": 20
}

GET/api/jobs/:id

Retrieve a single job. Use this to poll for completion.

# Poll until status is COMPLETED, FAILED, or CANCELLED
curl https://hrvst.donostia.ai/api/jobs/550e8400-... \
  -H "Authorization: Bearer hv_..."

Job status transitions: PENDING → PROCESSING → COMPLETED | FAILED | CANCELLED

DELETE/api/jobs/:id

Cancel and soft-delete a job. Returns {"status":"deleted"}.

POST/api/jobs/:id/unlock

Unlock full results for an hrvst-agent job. First 2 unlocks per account are free. Only works on COMPLETED jobs.

{ "resultsFullURL": "/jobs/550e8400-.../export?format=json" }

GET/api/scrapers

Returns all available scrapers with their slugs, credits, and output fields.

GET/api/user/me

Returns the authenticated user's profile and credit balance.

{
  "id": "user-id",
  "email": "you@example.com",
  "name": "Your Name",
  "credits": 500,
  "freeSearchesUsed": 1
}

Scraper Reference

google-maps 3 credits / record min 10 credits

Extract business listings from Google Maps. Returns name, address, phone, website, social profiles, rating, and coordinates.

Params

FieldRequiredDescription
queryyesSearch term, e.g. "restaurants in Madrid"
limitnoNumber of results. Default: 20
languagenoLanguage code (es, en, fr…). Default: en
countrynoCountry code (ES, US, MX…)

Output fields

name · address · phone · website · rating · reviewsCount · category · latitude · longitude · placeId · businessStatus · email1 · email2 · facebook · instagram · linkedin · twitter

google-maps-reviews 2 credits / review

Extract customer reviews from any Google Maps business. Use placeId from a google-maps job.

FieldRequiredDescription
placeIdyesGoogle Maps Place ID
limitnoNumber of reviews. Default: 50
sortBynonewest · oldest · most_relevant · highest_rating · lowest_rating

Output: reviewId · authorName · rating · text · publishedAt · likesCount · ownerResponse

emails-contacts 2 credits / contact

Crawl a website and extract all emails, phone numbers, and social profiles found.

FieldRequiredDescription
urlyesWebsite URL to crawl
crawlDepthnoPages deep to crawl (1–3). Default: 1

Output: email · name · title · phone · linkedIn · twitter · facebook · instagram · sourceUrl

amazon-products 3 credits / product

Search Amazon and extract product listings with prices, ratings, ASIN, and seller info.

FieldRequiredDescription
queryyesProduct search query
limitnoNumber of products. Default: 20
countrynoAmazon marketplace (US, UK, DE, ES, MX…). Default: US

Output: asin · title · url · price · currency · originalPrice · discount · rating · reviewsCount · seller · brand · isPrime · isBestSeller · availability

amazon-reviews 2 credits / review

Extract Amazon product reviews. Use asin from an amazon-products job.

FieldRequiredDescription
asinyesAmazon ASIN
limitnoNumber of reviews. Default: 50
countrynoMarketplace country. Default: US
sortBynorecent · helpful · critical · positive
filterByStarnoall · 1star · 2star · 3star · 4star · 5star

Output: reviewId · title · text · rating · authorName · publishedAt · isVerified · helpfulCount · country

hrvst-agent variable cost on unlock

AI-powered agent that accepts a natural language prompt and figures out what to scrape and how. Results are masked until unlocked. First 2 unlocks per account are free.

FieldRequiredDescription
promptyesNatural language description of what to find
modelnoAI model. Default: spark-1-mini

The response includes resultsPreview (5 masked records) immediately on completion. Call POST /api/jobs/:id/unlock to get resultsFull.

// listo para empezar

100 créditos gratis al registrarte. Sin tarjeta de crédito.

crear cuenta gratis →