Full-coverage parser for everything available on Glovo in Batumi, Georgia — restaurants, grocery stores, shops, pharmacies, and more.
Scrapes all products and menu items across 530+ venues, with built-in analytics: price comparison, deal finder, cheapest restaurant meals, and protein-optimized grocery basket builder.
- 54,000+ items from all Glovo Batumi categories
- 530 venues: McDonald's, KFC, Carrefour, Nikora, SPAR, Agrohub, local restaurants, shops, pharmacies
- Pre-scraped dataset included (
glovo_batumi_full.json) — use analytics immediately without scraping
| Category | Venues | Items | Examples |
|---|---|---|---|
| Restaurants & Food | ~400 | ~23,000 | McDonald's, KFC, local cafes, sushi, pizza, shawarma |
| Grocery Stores | ~50 | ~17,000 | Carrefour, Nikora, SPAR, Agrohub, Willmart |
| Shops | ~60 | ~7,000 | Electronics, flowers, pet stores, fashion |
| Pharmacy & Beauty | ~15 | ~6,000 | Pharmhouse, GPC, beauty shops |
git clone https://github.com/guard22/glovo-batumi-parser.git
cd glovo-batumi-parser
pip install -r requirements.txtThe repo includes a pre-scraped dataset. You can start using analytics right away:
# Search across all 54k items
python main.py search --query "pizza"
# Find cheapest restaurant food
python main.py food --limit 30
# Compare prices across stores
python main.py compare --product "coca-cola"
# Show best deals (biggest discounts)
python main.py deals --limit 20Re-scrape everything from Glovo Batumi. Takes ~15-20 minutes.
# Full scrape (all 530+ venues)
python main.py scrape --output glovo_batumi_products.json
# Scrape only restaurants
python main.py scrape --category food_1
# Scrape only grocery stores
python main.py scrape --category groceries_4
# Limit to first N stores
python main.py scrape --max-stores 10Search by keyword across all items.
python main.py search --query "chicken"
python main.py search --query "sushi" --category food_1
python main.py search --query "shampoo" --category pharmacy-beauty_3Find the cheapest dishes across all restaurants, with restaurant price rankings.
python main.py food --limit 30
python main.py food --query "burger"
python main.py food --query "khinkali" --budget 20Compare the same product across different stores and restaurants.
python main.py compare --product "milk"
python main.py compare --product "coca-cola"
python main.py compare --product "bread"Show products with the biggest active discounts.
python main.py deals --limit 30Build an optimal grocery basket within a budget. Two modes:
protein— maximize protein per GEL spentbalanced— spread across food groups (meat, dairy, grains, legumes, nuts)
python main.py basket --budget 100 --mode protein
python main.py basket --budget 50 --mode balancedGenerate a comprehensive analytics report: cheapest products, best deals, store comparison, optimal baskets.
python main.py analyze --budget 100# All venues
python main.py stores
# Only restaurants
python main.py stores --category food_1
# Only grocery stores
python main.py stores --category groceries_4| Code | Category |
|---|---|
food_1 |
Restaurants, cafes, fast food |
groceries_4 |
Grocery stores, supermarkets |
shops_22 |
Shops (electronics, flowers, etc.) |
pharmacy-beauty_3 |
Pharmacy & beauty |
- Store Discovery — Scans all Glovo Batumi category pages + subcategory type filters to find every venue
- Product Extraction — For each store, fetches the SSR page to extract
storeId/addressIdand category deeplink slugs, then calls the Glovo v4 API in parallel (8 concurrent workers) to pull all products - Normalization — Deduplicates by product ID, normalizes prices, extracts promo info
- Analytics — Keyword search, fuzzy price comparison, discount detection, nutrition-based basket optimization
- Uses Glovo's internal v4 REST API (
api.glovoapp.com) — no auth token required - Parallel category fetching with
ThreadPoolExecutor(8 workers per store) - Full scrape of 530+ venues completes in ~15-20 minutes
- Supports Georgian, English, and Russian product names
- Protein estimation via keyword-based nutrition knowledge base (supports multilingual names)
Each item in the JSON output:
{
"id": "12345",
"external_id": "67890",
"name": "Coca-Cola 0.5L",
"price": 2.50,
"promo_price": null,
"promo_type": null,
"currency": "GEL",
"display_price": "2.50 GEL",
"image_url": "https://...",
"category": "Drinks",
"store_slug": "carrefour-bats",
"store_name": "Carrefour",
"glovo_category": "groceries_4"
}glovo-batumi-parser/
main.py # CLI entry point
glovo_client.py # Scraper (store discovery + product extraction)
analytics.py # Analysis engine (search, compare, basket optimizer)
requirements.txt # Python dependencies
glovo_batumi_full.json # Pre-scraped full dataset (~27 MB)
glovo_batumi_products.json # Copy used as default CLI input
- Python 3.9+
requestsbeautifulsoup4
MIT