Discover brand page URLs across Uber Eats markets by country in a clean, export-ready dataset. This project helps you build reliable brand lists for research and outreach without manual searching. Use the Uber Eats brand URL extractor to scale market coverage across multiple countries with consistent structure.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for ubereats-listing-brands-by-country you've just found your team — Let’s Chat. 👆👆
This project collects official brand (restaurant, market, and related merchant) URLs for the countries you specify and outputs a structured dataset you can use immediately. It solves the problem of manually compiling large brand directories from multiple regions and normalizing results for analysis. It’s built for analysts, growth teams, agencies, and developers who need country-level brand discovery at scale.
- Accepts one or more ISO country codes (e.g., US, MX, CL) for multi-market discovery
- Lets you cap the maximum results returned per country to control scope and cost
- Produces normalized records with timestamps for auditing and reproducibility
- Includes the original per-country input context with each extracted URL
- Designed for fast, lightweight extraction using asynchronous networking
| Feature | Description |
|---|---|
| Multi-country targeting | Run discovery across multiple countries in one execution using ISO codes. |
| Result cap per country | Limit URLs per country to keep datasets focused and predictable. |
| Structured, export-ready output | Produces consistent records that work well in JSON/CSV/Excel pipelines. |
| Timestamped extraction metadata | Adds UTC timestamps and dates to support audits and incremental runs. |
| Input echo per record | Stores the country code used for each extracted item for traceability. |
| Async networking | Uses concurrent HTTP requests for faster collection and efficient throughput. |
| Field Name | Field Description |
|---|---|
| brand_url | The official Uber Eats brand page URL for a discovered merchant/brand. |
| main_task_started | UTC timestamp indicating when the main job began for the run. |
| extraction_date | UTC calendar date (YYYY-MM-DD) for the extraction. |
| extraction_datetime | UTC timestamp for when the specific item was recorded. |
| input.country_code | The normalized country code used to fetch this brand URL record. |
[
{
"brand_url": "https://www.ubereats.com/cl/brand/pollo-frito",
"main_task_started": "2025-07-18T12:00:00Z",
"extraction_date": "2025-07-18",
"extraction_datetime": "2025-07-18T12:00:01Z",
"input": {
"country_code": "cl"
}
}
]
ubereats-listing-brands-by-country (IMPORTANT :!! always keep this name as the name of the apify actor !!! Ubereats Listing Brands By Country )/
├── src/
│ ├── __init__.py
│ ├── main.py
│ ├── cli.py
│ ├── runner.py
│ ├── config/
│ │ ├── __init__.py
│ │ ├── settings.py
│ │ └── logging.py
│ ├── clients/
│ │ ├── __init__.py
│ │ ├── http_client.py
│ │ └── rate_limiter.py
│ ├── extractors/
│ │ ├── __init__.py
│ │ ├── brand_listing.py
│ │ └── normalizer.py
│ ├── outputs/
│ │ ├── __init__.py
│ │ ├── dataset_writer.py
│ │ └── schema.py
│ └── utils/
│ ├── __init__.py
│ ├── dates.py
│ ├── validation.py
│ └── retry.py
├── tests/
│ ├── __init__.py
│ ├── test_validation.py
│ ├── test_normalizer.py
│ └── test_brand_listing.py
├── data/
│ ├── input.sample.json
│ └── sample.output.json
├── .env.example
├── requirements.txt
├── pyproject.toml
├── LICENSE
└── README.md
- Market researchers use it to build country-wide brand directories, so they can compare category coverage and market saturation.
- Growth teams use it to discover potential partners, so they can generate lead lists and segment outreach by country.
- Agencies use it to map competitive presence, so they can benchmark client visibility across multiple regions.
- Data analysts use it to create time-stamped snapshots, so they can track brand listing changes and expansion trends.
- Developers use it to feed dashboards or CRMs, so they can automate enrichment and downstream workflows.
How do I choose the country codes and what format should they be in? Provide ISO country codes as an array of strings (for example: US, MX, CL). Each code is processed independently, and each output record includes the associated country code so you can filter and group results later.
How do I limit the number of URLs collected per country? Use the optional max_search_results parameter to cap results per country. This is useful for sampling, fast validation, or keeping datasets within a fixed size for downstream tooling.
What happens if a country has fewer brands than my requested maximum? The project returns whatever is available up to your maximum. If fewer results exist (or are reachable at the time of execution), you’ll receive fewer items for that country without breaking the run.
Are timestamps stored in local time or UTC? All extraction timestamps are recorded in UTC to keep multi-country runs consistent and comparable.
Primary Metric: Typically collects 50 brand URLs per country in ~3–8 seconds under normal network conditions, depending on region latency and response consistency.
Reliability Metric: Achieves ~97–99% successful request completion in stable conditions with automatic retries for transient failures and backoff on noisy endpoints.
Efficiency Metric: Uses asynchronous networking to keep throughput high while remaining lightweight, commonly staying under ~150–250 MB RAM for multi-country runs.
Quality Metric: Output records are consistently normalized with per-item timestamps and embedded input context, resulting in high traceability and low post-processing overhead for analytics pipelines.
