Hipcamp Scraper - Campgrounds, RV Parks & Glamping avatar

Hipcamp Scraper - Campgrounds, RV Parks & Glamping

Pricing

from $1.00 / 1,000 listing records

Go to Apify Store
Hipcamp Scraper - Campgrounds, RV Parks & Glamping

Hipcamp Scraper - Campgrounds, RV Parks & Glamping

Scrape Hipcamp campgrounds, RV parks, glamping and unique stays by US or AU region or listing link: price per night, rating, reviews, host, amenities, sites, photos, coordinates. Incremental monitoring, resume, MCP export.

Pricing

from $1.00 / 1,000 listing records

Rating

5.0

(1)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

2

Bookmarked

2

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

Hipcamp Scraper: Campgrounds, RV Parks and Glamping Data

Hipcamp Scraper turns Hipcamp's camping and glamping marketplace into structured data. Get campgrounds, RV parks, glamping sites and unique stays across every US state (plus Puerto Rico) and every Australian state or territory, with price per night, rating signal, host details, amenities, sites and coordinates. Search by region or paste listing links, monitor listings across runs for new and changed availability, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • Two ways to find listings. Search by region (US states, Puerto Rico, Australian states and territories) or paste Hipcamp listing links directly.
  • Deep catalogue walk. Each region returns its front-page highlights first, then keeps reading further into that region's full listing catalogue until your record budget is reached.
  • Full-detail reads on demand. Switch on full-detail reads for front-page listings, or read any linked listing in full: host, amenities, terrain, activities, stay policies and the per-site price list.
  • Real marketplace signals. Price per night, recommend percentage and count, bookings and favorites counts, campsites and accommodation types on every record.
  • Availability monitoring. Scheduled runs classify every listing as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED, with state you can name or share across a monitoring campaign.
  • MCP connector export. Send results into Notion and other connectors you already use, without changing the dataset.
  • Structured failures. A blocked or broken run fails loudly with a clear message instead of returning an empty dataset.

Use Cases

  • Camping and outdoor travel apps: feed campgrounds, RV parks and glamping sites with price, rating and location into your own search or booking tool.
  • Outdoor recreation and travel media: build state-by-state guides to campgrounds and unique stays with photos, amenities and coordinates.
  • Market and competitive research: compare price per night, booking counts and favorites across regions or accommodation types.
  • Availability and price monitoring: watch a set of regions or specific listings on a schedule and get only what is new, changed or gone.
  • Rural land and hospitality research: study acreage, terrain, activities and amenities data by state or territory.

Data You Get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
kind"listing"
recordId / listingId"100001"
maskedId"nfx7ha01"
urlHipcamp link to the listing
title"Pine Ridge Example Camp"
pricePerNight / basePricePerNight42.0 / 50.0
currency"USD"
recommendsPercentage / recommendsCount92 / 240
bookingsCount / favoritesCount850 / 14
campsitesCount4
landCategory / accommodationTypes"ranch" / ["tent", "rv"]
cityName / stateName / countryCode"Exampleville" / "California" / "US"
latitude / longitude38.0 / -120.0
imageUrlHipcamp cover photo link
detailLoadedtrue (full detail was read) or false (front-page tile only)
hostName / hostJoinedAt"Jane D." / "2026-01-01T00:00:00.000Z" (when full detail is read)
hostResponseRate / hostResponseTime95 / "within a day" (when full detail is read)
coreAmenities / basicAmenities["fire", "pets"] / ["picnic-table", "wifi"] (when full detail is read)
terrain / activities["river"] / ["fishing", "hiking"] (when full detail is read)
acreage12.0 (when full detail is read)
stayPoliciescancellation and stay policy text (when full detail is read)
cleaningFee / serviceFee / minNights / maxNights / baseCapacity / maxCapacity / accessType / isInstantBookable / hostId / photos / nearbyLands / metaTitle / canonicalUrl / isPrivatecheapest-site fees, stay limits, capacity and access, plus host id, photo links, nearby parks, the page's SEO text and listing flags (when full detail is read)
sites / reviews / totalReviewsper-site list (name, type, price, capacity) and camper reviews with the site's own count (when full detail is read)
changeType / changedFields"NEW" / [] (incremental mode only)
firstSeenAt / lastSeenAt"2026-01-01T00:00:00.000Z" (incremental mode only)

Front-page tiles already carry price, rating, photos and coordinates, with detailLoaded: false. Listings read in full (URL mode, the deep walk, or the detail toggle) add the host, address, amenities, terrain, activities, stay policies and per-site price list, with detailLoaded: true. Hipcamp's rating signal is a recommend percentage plus count; on fully-read listings the camper reviews the listing page carries are also returned in reviews[] (reviewer, date, text, positive flag, site), with totalReviews, positiveReviews, reviewsViewable and per-topic reviewSummaries. The number of reviews per listing is set by Max reviews per listing (default 20, 0 turns reviews off). Every record also carries the full upstream objects (raw, and rawDetail once detail is read), so no upstream field is ever dropped.

How to Use

  1. Pick a mode: search (one or more regions) or url (paste listing links).
  2. For search mode, list the regions to read, for example california, new south wales, texas. For URL mode, paste the listing links.
  3. Set Max items to control run size and cost, and turn on Read full detail for front-page listings if you want full detail on every record.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search one region:

{
"mode": "search",
"regions": ["california"],
"maxItems": 20
}

Search several regions with full detail on every listing:

{
"mode": "search",
"regions": ["california", "new south wales"],
"fetchDetails": true,
"maxItems": 50
}

Paste listing links:

{
"mode": "url",
"listingInputs": [
"https://example.com/en-US/land/pine-ridge-example-camp-xx000000",
"https://example.com/en-US/land/lakeview-example-stay-yy111111"
]
}

Recurring monitoring for one region:

{
"mode": "search",
"regions": ["texas"],
"incrementalMode": true,
"stateKey": "texas-weekly",
"emitExpired": true,
"maxItems": 0
}

Supported regions: all 50 US states plus Puerto Rico, and all Australian states and territories (new south wales, victoria, queensland, western australia, south australia, tasmania, northern territory, australian capital territory). Region names accept plain text, slugs, or a region page URL.

In URL mode every link is read as the page it points to. Query parameters (?page=, ?sort=, ?adults=) do not change what Hipcamp returns and are ignored; a link without a locale prefix is read as en-US.

Link shapeExampleWhat you get
Region pagehttps://www.hipcamp.com/en-US/d/united-states/california/camping/allThe region's front-page listings, then its full catalogue until Max items
Region page, Australiahttps://www.hipcamp.com/en-AU/d/australia/new-south-wales/camping/allSame, for an Australian state
City pagehttps://www.hipcamp.com/en-US/d/united-states/california/big-sur/camping/allThat city's listings (front page)
Filter pagehttps://www.hipcamp.com/en-US/d/united-states/california/camping/petsThe filtered front-page listings
Paginated region page.../california/camping/all?page=2Same scope as the region page (the page number is ignored by Hipcamp)
Sorted region page.../california/camping/all?sort=priceSame scope as the region page (the sort is ignored by Hipcamp)
Listinghttps://www.hipcamp.com/en-US/land/california-oz-farm-gv1qhdd5The listing in full detail
Listing without localehttps://www.hipcamp.com/land/california-oz-farm-gv1qhdd5Same listing
Listing with parameters.../land/california-oz-farm-gv1qhdd5?adults=2Same listing
Region listing sitemaphttps://www.hipcamp.com/sitemaps/v2/us-lands-ca.xml.gzEach listed listing in full detail, up to Max items

A bare state page (/d/united-states/california) is read as that state's camping/all page. Category pages such as /california/glamping are read as Hipcamp scopes them and can cover a wider area than the state. A bare listing id (/land/gv1qhdd5), map search links (/search?lat=...&lng=...) and links to other sites carry no listing data and are skipped with a warning in the log, never silently.

Behaviour change: URL mode with the listing links field left untouched now reads one example of each distinct scope instead of returning nothing (6 links: region, AU region, city, pets filter, one listing, one sitemap). The pre-filled form also lists the ?page=2, ?sort=price, locale-less and ?adults=2 variants; they resolve to a scope already in that set and are read once. A caller who sets only one of listingInputs, urls or startUrls gets only their own links; an untouched alias holding the sample list is ignored. If several of them hold different lists, the first non-empty one in that order is used. Leaving all of them untouched while Mode is search runs the region search, never the sample links. Set the field (an empty list reads nothing) to scope the run. Mode is always honoured: links sent with Mode search are ignored (the run searches the listed regions; California is used only when neither regions nor links are given, and a search with links but no regions searches nothing); set Mode to url to read links. Max items accepts up to 1,000,000 (0 still means no limit). Listings read in full by URL mode bill the Detail enrichment event exactly as before; discover-page tiles bill as ordinary results.

Output views

The dataset has four ready-made views (also linked from the run's Output tab): Results (overview of every record), Detail (host, amenities, sites, policies and review counts for fully-read listings), Changes (changeType, changedFields, first and last seen, for incremental runs) and Reviews (the reviews of each fully-read listing). Each run also stores a short run summary under the OUTPUT key of its key-value store: records emitted, details fetched, reads that failed and whether Max items was reached.

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/hipcamp-camping-glamping-scraper").call(run_input={"mode": "search", "regions": ["california"], "maxItems": 20})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["title"], listing["pricePerNight"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/hipcamp-camping-glamping-scraper').call({ mode: 'search', regions: ['california'], maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Multi-region runs and duplicate detection

A region's front page is read first, then the region's full catalogue is walked when the record budget allows, most curated listings first. Duplicate detection works across the whole run, not per region: a listing already handled from any region's front page (or already collected in a resumed run) is skipped in a later catalogue walk without being fetched again, so it is never returned or billed twice. The skip is keyed on the short id token at the end of each listing link. On Hipcamp that token identifies one listing site-wide (a link resolves by the token alone, whatever region name precedes it), so in practice this never hides a different listing. The only theoretical exception would be two genuinely different listings sharing the same token, in which case only the first one encountered in the run would be returned.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips every listing already collected there, so you don't pay twice for that run.
  • Incremental mode (incrementalMode) is for running the same search again and again (for example daily) and getting only new and changed listings. Each record is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED or EXPIRED (only after a run that scanned the whole tracked scope, and only with emitExpired). stateKey names or shares the stored state. A listing is UPDATED when any returned field changes (price, availability, per-site data, photos, host, amenities). The engagement counters favoritesCount, bookingsCount and recommendsCount are still returned but never make a listing UPDATED; ignoreFieldsForChanges excludes further fields (matched at any depth, including inside the per-site list). With incremental mode off, output is exactly as before.
  • Known limitation: combining Resume with Incremental mode on the same monitoring campaign does not fold the listings skipped by Resume into the incremental baseline. Those listings are correctly skipped (not re-pushed, not re-billed) in the resumed run itself, but because they are never re-classified there, the state saved at the end of that run does not know about them either. The next ordinary scheduled run of the same campaign then sees them as NEW again and bills them once more, even though they were already collected. Workaround: after resuming an interrupted incremental run, expect one extra NEW row per resumed listing on the campaign's next normal run, or avoid combining Resume with Incremental mode on the same stateKey until this is fixed.
  • Known limitation: the EXPIRED batch produced at the end of a complete scan is not capped by Max items. If a monitoring campaign has a large tracked baseline and a run's scope comes back mostly empty (for example after a source change, a narrowed region list, or a mostly-unreadable catalogue), every tracked listing no longer found is pushed as EXPIRED in that one run, regardless of Max items. Workaround: for very large monitoring campaigns, budget for occasional oversized EXPIRED runs, or turn emitExpired off and check for gone listings by other means if a hard per-run cost ceiling matters more than knowing what vanished.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title (the listing's name) and its key fields flattened to plain text (price per night, location, recommends percentage, URL, and so on). Nested objects are collapsed to their main value and long lists are trimmed to the first few names. The complete record always stays in the Apify dataset; the connector copy is a readable digest for browsing in your app.

  1. Authorize a connector once under Apify > Settings > Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where listing pages should be created.
  4. Optionally cap each connector's writes per run with maxNotifyListings (default 50).

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (regions) or url (listing links).
regionsarray["california"] (prefill)Search mode: one or more regions by name, slug or region page URL. All 50 US states plus Puerto Rico, and all Australian states and territories.
categorystringallSearch mode: narrow each region to one sub-category page: pets, glamping, rv, cabins, beach, lake or treehouse. A sub-category returns that page's front-page listings (about 20 per region); the deeper catalogue walk applies to all only. A sub-category a region does not have is reported and skipped. The site offers no sort order, so none is exposed.
listingInputsarrayone example of each URL shape (see URL mode)URL mode: listing links, region/city/category pages, or a region listing sitemap.
urlsarray(none)Alias for listingInputs.
startUrlsarray(none)Alias for listingInputs, accepted under the name other Apify actors use for URL mode. Search-map links are accepted too.
maxItemsinteger20Stop after this many records (0 = no limit; the run then stops when the regions' catalogues are exhausted).
maxReviewsPerListinginteger20Camper reviews included on each fully-read listing (0 turns reviews off, at most 100000). Each listing page carries at most the first 30 reviews, so 30 is the most any listing returns however high you set this; totalReviews shows the site's own count.
fetchDetailsbooleanfalseAlso read full detail for front-page listings (host, amenities, sites, policies). Each read adds one Detail enrichment event.
resumeFromRunIdstring(none)Continue one interrupted run, skipping listings already collected there.
incrementalModebooleanfalseReturn only new and changed listings on scheduled runs.
stateKeystring(none)Name or share an incremental-mode monitoring campaign.
ignoreFieldsForChangesarray(none)Extra field names that never make a listing UPDATED (incremental mode only).
emitUnchangedbooleanfalseAlso return (and bill) unchanged listings.
emitExpiredbooleanfalseAlso return (and bill) listings no longer found, after a complete scan.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which listing pages are created.
maxNotifyListingsinteger50Cap on listings written to each connector per run.
proxyConfigurationobjectApify ProxyConnection settings.

Output Example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"kind": "listing",
"recordId": "100001",
"listingId": "100001",
"maskedId": "nfx7ha01",
"url": "https://example.com/en-US/land/pine-ridge-example-camp-nfx7ha01",
"title": "Pine Ridge Example Camp",
"pricePerNight": 42.0,
"basePricePerNight": 50.0,
"currency": "USD",
"recommendsPercentage": 92,
"recommendsCount": 240,
"bookingsCount": 850,
"favoritesCount": 14,
"campsitesCount": 4,
"landCategory": "ranch",
"accommodationTypes": ["tent", "rv"],
"cityName": "Exampleville",
"countyName": "Example County",
"stateName": "California",
"stateAbbrvName": "CA",
"countryCode": "US",
"latitude": 38.0,
"longitude": -120.0,
"imageUrl": "https://example.com/images/pine-ridge-cover.jpg",
"detailLoaded": true,
"hostName": "Jane D.",
"hostJoinedAt": "2026-01-01T00:00:00.000Z",
"hostResponseRate": 95,
"hostResponseTime": "within a day",
"coreAmenities": ["fire", "pets", "toilet", "trash"],
"basicAmenities": ["picnic-table", "wifi"],
"terrain": ["river"],
"activities": ["fishing", "hiking"],
"acreage": 12.0,
"stayPolicies": ["No open fires during fire season"],
"sites": [
{
"siteId": "000501",
"name": "Example Meadow",
"accommodationType": "tents",
"pricePerNight": 42.0,
"capacity": 4,
"isInstantBookable": true
}
],
"raw": {},
"rawDetail": {},
"changeType": "NEW",
"changedFields": [],
"firstSeenAt": "2026-01-01T00:00:00.000Z",
"lastSeenAt": "2026-01-01T00:00:00.000Z"
}

Plan Requirement

Hipcamp pages load without a residential proxy: in our checks a datacenter-class connection read region and listing pages normally and no block was observed, so no residential proxy is required. The default Proxy configuration (Apify Proxy) is enough on any plan that includes Apify Proxy access. A residential proxy group is optional and only worth choosing for very large or frequent runs.

On an Apify free plan (which has no proxy access) the actor prints this warning and continues on a backup connection:

The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable. For residential access, upgrade at https://apify.com/pricing or supply your own proxy URLs.

If nothing could be read the run fails with one of these messages instead of returning an empty dataset: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required" (account without proxy access or invalid own proxy URLs), "No results: residential proxies are unavailable on this run ... and the backup connection could not load the requested Hipcamp pages" (free plan), or "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search" (any other run).

FAQ

How much does it cost?

You pay per record returned. A full-detail read adds a Detail enrichment charge: on every URL-mode listing, on listings reached by the deep catalogue walk (which starts automatically when Max items asks for more than a region's front page holds), and on front-page listings when the detail toggle is on. The Pricing tab shows the current rates. Reviews on a fully-read listing (reviews[]: reviewer, date, text, positive flag, site, with totalReviews and positiveReviews) add one more Detail enrichment event for every started block of 10 reviews delivered on that row (for example 20 reviews = 2 events), charged after the row is saved and never for unchanged or suppressed listings; set Max reviews per listing to 0 to skip them. The event prices are the ones shown on the Pricing tab; this actor adds no other charge. Use Max items and Max reviews per listing to cap the cost of a run.

This actor collects only publicly available listing data. You are responsible for how you use it: follow Hipcamp's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing photos and host information may be subject to third-party rights.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated, reappeared and (optionally) expired listings, and unchanged ones are not billed unless you turn that on too.

Does Max items cap listings marked EXPIRED?

No, not currently. A run that completes a full scan of its tracked scope pushes every tracked listing no longer found as EXPIRED, regardless of Max items. On a large, long-running monitoring campaign this can push far more rows than Max items suggests in the one run where the gone listings are detected. See the tip under "Resume and recurring updates" for the current workaround.

Does Resume work together with Incremental mode?

Partially. Resume correctly skips re-pushing and re-billing listings already collected in the run you resumed. It does not yet fold those listings into the incremental baseline, so they can come back as NEW (and be billed once) on the campaign's next ordinary scheduled run. See the tip under "Resume and recurring updates" for the current workaround.

Why did my run fail instead of returning an empty dataset?

If the site refuses every request, the run stops with a clear message so "no listings in this region" is never confused with "nothing could be read". Run it again in a few minutes. If only some regions or listings could be read, you still get what was found.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

๐Ÿ”— Want more travel data?

Pair this actor with these related scrapers from the same team:

๐Ÿจ Yanolja Scraper
Scrape Yanolja (NOL), Korea's largest accommodations marketplace, by region or URL. Every...
๐Ÿจ Airbnb Scraper
Scrape Airbnb stays by destination or link: nightly and total price, rating breakdown...
๐Ÿจ Hostelworld Scraper
Scrape Hostelworld hostels, hotels, guesthouses, B&Bs, apartments and campsites by city...
๐Ÿจ Klook Scraper
Scrape Klook activities, tours, attractions and travel experiences from search pages or...
๐Ÿจ Vrbo Scraper
Extract vacation rental data from Vrbo.com by location, region, coordinates, property...
๐Ÿจ Rover Pet Care Scraper
Scrape Rover.com pet-care providers: sitter search by city, rates per stay type, ratings...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support & custom scrapers

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.