Places (beta)
Beta: place data is still sparse, and coverage grows daily as Virlo collects more. Today only a minority of TikTok and Instagram videos carry a place tag and YouTube carries none, so a place with few videos may simply not be collected yet.
The places creators tag on their TikTok and Instagram posts: a shopping centre, a beach, a stadium, a suburb or a city. Find the places Virlo has seen, see how many videos are tagged at each, and read the videos tagged there.
- What it does
- Finds places by name, suburb, postcode or country, ranked by how many Virlo videos are tagged there, and lists the videos tagged at one of them.
- You send
- A name, suburb, postcode or country. Or a place id for its videos.
- You get back
- Within seconds, places with their suburb, postcode, coordinates and video count, or the videos tagged at one place.
- Cost
- $0.05 per call, even when nothing matches. Failed requests are free.
What a place is
- A place is the tag the creator chose, not GPS. When a creator posts on TikTok or Instagram they can tag a location. It is usually where the video was filmed, and sometimes it is wrong (a Melbourne Cup video tagged "Gulf of Carpentaria"). Say "tagged at", not "filmed at".
- About 1 TikTok or Instagram video in 7 carries a tag. YouTube has no place tag, so YouTube videos never have one. A place's videos are the tagged ones in Virlo's library, not every video made there.
- Venues and areas.
kindisvenue(a business, landmark, beach, station) orarea(a suburb, city, state or country). Instagram sends no type, so its places havekind: null. - Places and crowds only. These endpoints describe places and what people post there. There is no way to list where one creator has been, and Virlo will not add one.
- New since November 2026. Virlo started keeping tags on Nov 7 2026 and is filling in older TikTok videos, so counts grow over time.
Location on videos
Every video read from Virlo's library carries location: the place its creator tagged, or null when there is no tag. It is on search results, agent videos, the videos digest and the per-platform digests, and a sound's videos. The fields are listed under Fields.
location on a video
"location": {
"id": "20267999-d417-4ef0-ab3f-06d09a387454",
"name": "Queen Victoria Market",
"kind": "venue",
"category": "Shopping",
"locality": "Melbourne",
"postcode": "3000",
"city": "Melbourne",
"region": "VIC",
"country": "AU",
"lat": -37.806809,
"lng": 144.959434
}
Search places
The places Virlo has seen that match your filters, most tagged first (by video_count, then name).
Query parameters
Send at least one of q, locality, postcode or country. An unknown parameter returns 400.
- Name
q- Type
- string
- Description
Place name contains this, not case-sensitive:
chadstone,bondi beach,coles. 2 to 100 characters.
- Name
locality- Type
- string
- Description
Suburb, town or city, matched exactly (not case-sensitive) against the place's
localityorcity:St Kilda,Melbourne,Brooklyn. Letters, digits, spaces,.,'and-only.
- Name
postcode- Type
- string
- Description
Postcode, matched exactly:
3182,10001.
- Name
country- Type
- string
- Description
ISO 3166 alpha-2:
AU,US,GB.
- Name
kind- Type
- string
- Description
venueorarea. Instagram places have no kind and match neither.
- Name
page- Type
- integer
- Description
Default 1.
- Name
limit- Type
- integer
- Description
Default 50, maximum 100.
pagination.total is exact. A search that matches more than 5,000 places returns 400: narrow it with q, locality, postcode or kind.
Request
curl "https://api.virlo.ai/v1/places?locality=Melbourne&country=AU&limit=2" \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"data": [
{
"id": "1f713019-cf97-4006-ad1b-fb20ce05a199",
"name": "Flemington Racecourse",
"kind": "venue",
"category": "Leisure",
"locality": "Flemington",
"postcode": "3031",
"city": "Melbourne",
"region": "VIC",
"country": "AU",
"lat": -37.78547,
"lng": 144.91902,
"video_count": 79
},
{
"id": "b7fa189b-df27-44c5-9f83-e483927c8e18",
"name": "Melbourne Cricket Ground",
"kind": "venue",
"category": "Leisure",
"locality": "Richmond",
"postcode": "3002",
"city": "Melbourne",
"region": "VIC",
"country": "AU",
"lat": -37.819919,
"lng": 144.98335,
"video_count": 73
}
],
"pagination": {
"page": 1,
"limit": 2,
"total": 245,
"total_pages": 123,
"has_next_page": true,
"has_prev_page": false
}
}
Videos tagged at a place
The videos in Virlo's library whose creator tagged this place, newest first. Each video has the same fields as a search result, including location. The answer also carries the place.
Path parameters
- Name
id- Type
- string
- Required
- *
- Description
A place id, from search places or a video's
location.id.
Query parameters
- Name
sort- Type
- string
- Description
newest(default) ormost_views.
- Name
page- Type
- integer
- Description
Default 1.
- Name
limit- Type
- integer
- Description
Default 25, maximum 25. Larger values are cut to 25.
An unknown id returns 404 not_found. pagination.total is exact.
Request
curl "https://api.virlo.ai/v1/places/1f713019-cf97-4006-ad1b-fb20ce05a199/videos?sort=most_views&limit=1" \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"data": {
"place": {
"id": "1f713019-cf97-4006-ad1b-fb20ce05a199",
"name": "Flemington Racecourse",
"kind": "venue",
"category": "Leisure",
"locality": "Flemington",
"postcode": "3031",
"city": "Melbourne",
"region": "VIC",
"country": "AU",
"lat": -37.78547,
"lng": 144.91902,
"video_count": 79
},
"videos": [
{
"id": "4b1f7a52-9c3e-4f0a-8d21-6e5a2c9b7d10",
"url": "https://www.tiktok.com/@victoriaracingclub/video/7702789419979279637",
"platform": "tiktok",
"views": 296977,
"likes": 15200,
"publish_date": "2026-11-04T05:12:40",
"virality_score": 21.4,
"author": { "username": "victoriaracingclub", "followers": 88000, "verified": true },
"upload_region": "AU",
"location": { "id": "1f713019-cf97-4006-ad1b-fb20ce05a199", "name": "Flemington Racecourse", "kind": "venue", "locality": "Flemington", "country": "AU" }
}
]
},
"pagination": {
"page": 1,
"limit": 1,
"total": 79,
"total_pages": 79,
"has_next_page": true,
"has_prev_page": false
}
}
Shortened: each video has every search result field.
Filter a video search by place
POST /v1/search/videos takes places: a list of place words, any of them. A word matches as a phrase inside the place name ("chadstone" matches "Chadstone Shopping Centre") or exactly against its suburb, city or postcode. ["*"] means any video with a tagged place.
A library search with places alone is too broad: add a platform, region, topic or date window. To read every video at one place, use videos tagged at a place.
Tagged in Melbourne, on TikTok
curl -X POST "https://api.virlo.ai/v1/search/videos" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "scope": "virlo_library", "places": ["melbourne"], "platforms": ["tiktok"] }'
applied then includes place: melbourne. Search pricing is unchanged: $0.05 per library page of 25 with results.
Search near a point
near takes map points instead of names: each item is "lat,lng,km", a latitude, a longitude and a radius in km from 0.1 to 200, any of them. A video matches when its tagged place's own map point lies inside the radius, so untagged videos never match. Take the point from a place's lat and lng above, or from your own geocoder. With places as well, a video must match both. A point out of range is a 400 and is not charged.
Like places, near alone is too broad for the library: add a platform, region, topic or date window.
Tagged within 5 km of central Melbourne, on TikTok
curl -X POST "https://api.virlo.ai/v1/search/videos" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "scope": "virlo_library", "near": ["-37.8136,144.9631,5"], "platforms": ["tiktok"] }'
applied then includes near a point. The price is the same as any library search page.
Fields
A place, and a video's location, have:
- Name
id- Type
- string
- Description
Virlo place id.
- Name
name- Type
- string
- Description
The place name as the platform shows it.
- Name
kind- Type
- string | null
- Description
venueorarea.nullon Instagram, which sends no type.
- Name
category- Type
- string | null
- Description
TikTok's top-level place category, like
Food and Drink,ShoppingorLeisure.nullon Instagram.
- Name
locality- Type
- string | null
- Description
Suburb or town read from the place's street address (Australian, New Zealand, US and Canadian formats).
nullwhen the address does not parse; never guessed.
Costs and errors
GET /v1/places: $0.05 (5 credits) per call.GET /v1/places/{id}/videos: $0.05 (5 credits) per call, up to 25 videos. The same price per video as a search library page.- Calls that return nothing are still charged. Errors are never charged.
400validation_error: no search field, a bad field, or more than 5,000 matching places.404not_found: unknown place id.
The X-Cost response header is the exact charge for each call.

