Platform specifics
What is specific to a footprint this varied
These are the reasons a Glovo dataset needs its own handling rather than a shared retail schema.
Verticals observed per market, not assumed globally
Glovo's category structure is not uniform. Pharmacy is live in some markets and not others; own-store quick commerce
exists in some cities and not others; the courier category is prominent in some markets and marginal elsewhere.
A feed that assumes a global category structure produces two failure modes, both quiet:
- An absent vertical looks like an absence of merchants, which reads as a market opportunity that does not
exist.
- A vertical present only in some cities gets averaged into a national figure that describes neither the
cities with it nor those without.
We record verticals_observed per country and per city in every batch, so a gap is visible as a
structural gap rather than a data gap. This is the same discipline the Uber Eats page applies, and it matters more
here because the variance is wider.
Price setter, and Glovo's own stores
Glovo carries partner merchant listings and, in some markets, its own quick-commerce stores. Those are different
commercial arrangements with different price setters.
- Partner listings — the merchant sets the price, frequently above their own in-store price.
- Glovo's own stores — Glovo sets it, holding its own inventory.
We record price_setter and surface on every record and never blend them. A price movement
in a blended series could be a merchant's decision or Glovo's, with nothing in the data to say which.
The courier category is not a product feed
Glovo's "anything" courier service has no catalogue — the customer describes what they want fetched. There is
nothing to collect except the service's availability and pricing structure, and we say so rather than including it in
a product count.
Currencies, volatility and local-language listings
FX per observation
The footprint includes several volatile currencies. As on our Rappi Turbo work, we stamp fx_rate and
fx_observed_at at the observation moment rather than applying a daily close, because intraday movement
can exceed the price change you are measuring.
Local currency is always the primary field. Converted values are derived and labelled as derived.
Languages
The footprint spans Spanish, Italian, Portuguese, Polish, Romanian, Ukrainian, Georgian, Kazakh and several others.
Product and item names are retained exactly as published, in their original script.
We do not machine-translate into the name field. Matching runs on identifiers, normalised attributes and image
hashes rather than title similarity, which fails badly across a language set this wide.