Add a city and see the demand its events will create
Events is the only Feed API with no import to launch: Veetal builds the dataset city by city, and your side is one step — register the location. What comes back is not an agenda, it is a demand forecast per night, per guest profile and per distance ring.

What you'll build
A year of Barcelona's events with, for each one, total roomnights, the booking window (which opens before the event does), daily pressure against city inventory, the split by hotel category and guest profile, and the geographic distribution by ring.
How it works
- 01The one thing you have to do
- 02Read the calendar
- 03The part that prices rooms
- 04Where in the city, not just how many
- 05Attendance is not demand
- 06The types that behave differently
- 07What happens next
Step by step
By the end you will be able to ask "what is happening in Barcelona and how much hotel demand will it create" and get an answer with roomnights per day, pressure against the city's inventory, and where in the city those rooms will be booked.
What you need: the destination registered as a location on your account. That's it.
What it costs: events are billed per location and per month, not per request. There is no import to launch and no schedule to configure — reading is the cheap part.
The one thing you have to do
Events is the odd one among the Feed APIs: there is no import. The dataset is produced by Veetal's own pipeline, city by city. Your side of the contract is a single step — tell us which city you care about.
On Locations, Add locations, and search the destination. The dialog states the purpose in its own subtitle: "You will use them to search events in the destination".

Barcelona returns four candidates in four countries. Pick the wrong one and every event you read afterwards belongs to another city. Use Show Map if the name alone doesn't settle it.

The row shows the tier and the coordinates the backend resolved. Copy its id with the copy button on the row (or read it from GET /v3/account/location): that is the location_id every events call takes.
⚠️ If you create the location through the API instead (POST /v3/account/location), name must be the real destination name — Veetal uses it to find the booking_dest_id on Booking, and a renamed destination returns error 731.
Notice what the page does not have for this API: no Imports tab, no Schedules tab, no import to run. The Events feed page has only Locations, Events and Requests; above the tabs, five charts summarise the dataset — by type, by audience type, evolution, monthly and by attendance.
Read the calendar
GET /v3/feed/events/{location_id} with an optional date range and min_impact. Here is a real answer for Barcelona, trimmed to what matters:
{
"name": "Smart City Expo World Congress",
"acronym": "SCEWC",
"type": "fair_convention",
"subtype": "congress_technology",
"status": "verified",
"dates": { "start": "2026-11-03", "end": "2026-11-05", "duration_days": 3 },
"location": {
"venue": "Fira Barcelona - Recinte de Gran Via",
"address": "Av. Joan Carles I, 64, 08908 Barcelona, Spain"
},
"attendance": { "unique_visitors": 27000, "magnitude": "medium" }
}
That much you could get from a listings site. The rest is what the dataset is actually for.
The part that prices rooms
"hotel_impact": {
"level": "high",
"score": 0.559,
"total_roomnights": 63061,
"booking_window": { "start": "2026-11-02", "end": "2026-11-06" },
"city_pressure": {
"city_inventory_rooms": 40000,
"peak_pressure_pct": 0.5592,
"avg_pressure_pct": 0.3153,
"peak_day": "2026-11-03",
"days_at_or_above_80pct": 0
}
}
63,061 roomnights across a city with 40,000 rooms, peaking at 55.9% of the entire inventory on 3 November. Pressure percentages are fractions from 0 to 1, and they can exceed 1 — that means the event demands more rooms than the city has.
Note the booking window opens on 2 November, the day before the congress starts. Delegates arrive the night before. If your rate calendar treats 2 November as an ordinary Monday, you have already left money on the table before the event begins.
Then hotel_impact.daily breaks the demand down day by day:
{
"date": "2026-11-03",
"roomnights": 22367,
"pressure_pct": 0.5592,
"by_category": { "budget_hotels": 1734, "mid_range_hotels": 12737, "luxury_hotels": 7896 },
"by_profile": { "international_business": 17290, "national_business": 4592, "international_leisure": 276 }
}
17,290 of those roomnights are international business. That is a completely different guest — and a completely different price ceiling — from a leisure peak of the same size.
Where in the city, not just how many
hotel_impact.geographic_distribution places that demand on the map:
"geographic_distribution": {
"weighted_radius_km": 4.9,
"concentration": "near_venue",
"shares": { "at_venue": 0.092, "near_venue": 0.656, "regional": 0.025 },
"rings": {
"2000-5000": {
"mid_range_hotels": { "roomnights": 20073, "impact": "high" },
"luxury_hotels": { "roomnights": 12909, "impact": "high" }
}
}
}
65.6% of the demand lands near the venue, with a weighted radius of 4.9 km, concentrated in mid-range and luxury hotels in the 2-5 km ring. If you are a mid-range hotel two kilometres from Fira Gran Via, this event is yours. If you are a budget hotel on the other side of the city, the same event barely moves you — and the dataset says so instead of leaving you to guess.
Attendance is not demand
Compare two Barcelona events from the same feed:
| Smart City Expo | Manga Barcelona | |
|---|---|---|
| Visitors | 27,000 | 81,424 |
| Roomnights | 63,061 | 42,853 |
| Peak pressure | 55.9% | 31.2% |
| Concentration | near_venue (4.9 km) | dispersed_regional (8.5 km) |
Figures as the feed returned them in October 2026; the dataset is rebuilt every month.
Manga Barcelona draws three times more people and generates a third fewer roomnights, at lower pressure and spread across the region. The reason is in the audience mix: 43,253 of its attendees are local_no_stay — they go home to sleep. A congress of 27,000 mostly international business attendees fills more hotel rooms than a fair of 81,000 visitors, half of them locals — exactly the mistake that reading a "biggest events" list gets you into.
The types that behave differently
type: "cruise"adds acruiseblock with the ship-by-ship call list: for 16-20 October, 24 ships, 81,232 turnaround passengers (starting or ending their cruise in the port), 51,988 roomnights, each call with its date, ship and pax. These are pre- and post-cruise nights, estimated from the port schedule.type: "holiday"is informational and carries no hotel impact. There is also a dedicated route,GET /v3/feed/events/{location_id}/holidays, for official holidays and source-market school breaks.- Every event carries an
editionsarray with all the editions of its series (past, current and future), each with its dates and the attendance figure published by its source, so you can check the attendance estimate against what previous years actually drew.
What happens next
Filter with min_impact (high and above is usually the actionable set) and event_type, and walk the year with from_date/to_date. The response is a plain array capped by limit (default 250, max 500): a busy city like Barcelona has several hundred events a year, so page with offset until a page comes back shorter than limit.
The natural pairing is the Booking location search feed for the same destination (a separate Location search entity with its own import): events tell you when demand arrives and what kind, location search tells you what the destination's hotels are charging for it.
Questions
Do I have to launch an import to get events?
No, and there isn't one to launch. Events is the only Feed API with no import and no import tab: Veetal's own pipeline builds the dataset city by city. You register the location and read.
The endpoint returns an empty array. What's wrong?
Either the city is new to Veetal and its first build hasn't run yet (cities are built in a monthly run at the start of each month), or your date range falls outside what has been built. Check that the location is the right one — Barcelona exists in four countries — and widen from_date/to_date before concluding there is nothing there.
What does a pressure percentage above 1 mean?
That the event needs more rooms than the city has. Pressure is expressed as a fraction of city_inventory_rooms from 0 to 1, and it is allowed to go over: it is a demand estimate, not an occupancy reading. Anything approaching 1 is a night to price aggressively.
Why does an event with more visitors generate fewer roomnights?
Because attendance counts people and roomnights count beds. Look at audience_mix: attendees classed as local_no_stay sleep at home. Manga Barcelona brings about 81,000 visitors but more than 43,000 of them are local, so it produces fewer roomnights than a 27,000-attendee international congress.
What is the booking window for?
It is the range of nights the event actually generates, and it usually starts before the event does — delegates arrive the night before. That first night is the one most rate calendars miss.
How do I know whether an event affects my hotel specifically?
Use hotel_impact.geographic_distribution. concentration and weighted_radius_km tell you how tight the demand is around the venue, and rings breaks the roomnights down by distance band crossed with hotel category. A near_venue event at 4.9 km with high impact on mid_range in the 2-5 km ring is a very different proposition depending on where you are.
Build your own
Start free with 1,000 API credits. No credit card, no sales call.
What do you want to build with events?
Say it in one line and we hand you back the prompt, the recipe if one already exists, and the APIs it runs on — starting with events.