ArcGIS APIhub.arcgis.com ↗
Search and retrieve open data from ArcGIS Hub. Access datasets, maps, apps, and documents with metadata including extent, tags, view counts, and license info.
What is the ArcGIS API?
The ArcGIS Hub API exposes 2 endpoints for searching and retrieving open data content published on hub.arcgis.com. Use search_items to query the full catalog by keyword, content type, and sort order, getting back paginated results with fields like num_views, tags, source, and geographic extent. Use get_item to pull complete metadata for any individual item by its 32-character ID, including license info, spatial reference, and service URL.
curl -X GET 'https://api.parse.bot/scraper/d3decdf1-6a88-47f9-a4be-92a6be164507/search_items?page=1&limit=10&query=weather&sort_by=relevance&collection=all' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace hub-arcgis-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: ArcGIS Hub SDK — search open data, drill into item details."""
from parse_apis.hub_arcgis_com_api import ArcGISHub, SortBy, Collection, ItemNotFound
client = ArcGISHub()
# Search for weather-related datasets, sorted by most views
for item in client.item_summaries.search(query="weather", sort_by=SortBy.MODIFIED_DESC, collection=Collection.DATA, limit=5):
print(item.title, "|", item.type, "|", item.num_views, "views")
# Drill down: take the first result and fetch full details
hit = client.item_summaries.search(query="wildfire", limit=1).first()
if hit is not None:
detail = hit.details()
print(detail.title)
print("description:", detail.description[:120] if detail.description else "(none)")
print("tags:", detail.tags)
print("rating:", detail.avg_rating, "comments:", detail.num_comments)
# Point lookup by the same id through the items collection
try:
refreshed = client.items.get(id=hit.id)
print("size:", refreshed.size, "bytes | completeness:", refreshed.score_completeness)
except ItemNotFound as e:
print("Item no longer available:", e.message)
print("exercised: item_summaries.search / ItemSummary.details / items.get")
Search ArcGIS Hub open data catalog. Returns paginated results filtered by query, collection type, and sort order. Each page returns up to the specified limit of items with metadata including title, type, tags, view count, and geographic extent when available.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| limit | integer | Maximum number of results per page (1-100). |
| query | string | Free-text search query to match against item titles, descriptions, and tags. When omitted, returns all content sorted by the chosen sort order. |
| sort_by | string | Sort order for results. Prefix with '-' for descending on title/created/modified. |
| collection | string | Filter results by content collection type. |
{
"type": "object",
"fields": {
"page": "current page number",
"items": "array of item objects with id, title, snippet, type, owner, source, tags, categories, created, modified, num_views, access, license, url, thumbnail, and optional geometry",
"limit": "page size used",
"total": "total number of matching items across all pages",
"returned": "number of items returned in this page"
},
"sample": {
"data": {
"page": 1,
"items": [
{
"id": "742bc12654f7489dbe9443b62bb8eb42",
"url": "https://ecity.maps.arcgis.com/apps/webappviewer/index.html?id=742bc12654f7489dbe9443b62bb8eb42",
"tags": [
"Weather",
"Feat"
],
"type": "Web Mapping Application",
"owner": "lsmallman_ECity",
"title": "Weather",
"access": "public",
"source": null,
"created": 1573581301000,
"license": "none",
"snippet": "View a live weather radar and current weather advisories",
"modified": 1614263438000,
"num_views": 717,
"thumbnail": "thumbnail/thumbnail1614263436611.png",
"categories": []
}
],
"limit": 5,
"total": 7065,
"returned": 5
},
"status": "success"
}
}About the ArcGIS API
Searching the ArcGIS Hub Catalog
The search_items endpoint accepts a free-text query matched against item titles, descriptions, and tags. You can narrow results with the collection parameter to filter by content type (e.g. datasets, maps, applications, documents, sites). Pagination is controlled via page (1-based) and limit (1–100). The response includes total matching items across all pages alongside the returned count for the current page, making it straightforward to walk through large result sets. Each item in the items array carries id, title, snippet, type, owner, source, tags, categories, created, modified, num_views, access, and licens (license) fields.
Retrieving Full Item Metadata
Once you have an item ID from search results, get_item returns the complete record for that item. The response expands on the search summary with additional fields: url (the item's service or application endpoint), size in bytes, type keywords, and access level (public, private, or org). Timestamps for created and modified are returned in milliseconds. The source field identifies the publishing organization, which is useful when filtering data by government agency or institutional publisher.
Coverage and Data Types
ArcGIS Hub hosts open data contributed by city, county, state, federal, and international government agencies alongside universities and NGOs. Items span Feature Services, Web Maps, CSV files, shapefiles, and web applications. The type field in both endpoints distinguishes these categories. The tags and categories arrays reflect the keywords publishers assigned, which vary in consistency across organizations. The num_views field gives a rough signal of how widely used a particular dataset is.
The ArcGIS API is a managed, monitored endpoint for hub.arcgis.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when hub.arcgis.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official hub.arcgis.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Discover publicly available GIS datasets for a city or region using the
queryandcollectionparameters insearch_items - Build a data catalog aggregator that indexes government open data by
sourceorganization andtags - Identify the most-accessed spatial datasets on ArcGIS Hub by sorting results on
num_views - Retrieve the service
urlfor a Feature Service item viaget_itemto pipe it into a GIS analysis pipeline - Monitor dataset freshness by tracking the
modifiedtimestamp on known item IDs - Filter open data by license type using the
licensfield returned insearch_itemsresults - Enumerate all map items published by a specific organization by querying the
sourcefield across paginated results
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does ArcGIS Hub have an official developer API?+
What does `get_item` return that `search_items` doesn't?+
get_item adds the item's url (pointing to the underlying service or application), size in bytes, and type keywords not included in the search summary. Both endpoints share core fields like id, title, type, owner, tags, and created/modified timestamps, but get_item is the right call when you need the full record for a single known item.Can I filter `search_items` results to a specific geographic bounding box?+
search_items endpoint filters by query, collection, and sort_by but does not accept a spatial extent or bounding box parameter. Geographic extent is returned as metadata on items when available. You can fork this API on Parse and revise it to add a spatial filter parameter.Does the API return the actual dataset content (rows, geometries)?+
url. They do not return feature rows, geometries, or attribute tables. The url field from get_item points to the underlying service where the data itself can be fetched separately. You can fork this API on Parse and revise it to add an endpoint that queries a Feature Service URL for actual records.Are items from private or organization-restricted ArcGIS Hub portals included?+
access field on items can be public, private, or org, but items returned are those visible without authentication. Private and org-restricted items are not exposed.