Skip to content
VEN0MXDARKPublic

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

AR Labs Scout

A free, no-API-key business/place finder built entirely on open data. Search any city for real businesses by category, break a whole country down by city, compare multiple searches side by side, or pull structured data out of any public webpage — all running locally on your own machine.

Python Flask License Data

Contents

Why it exists

Every data source this app uses is free and public — OpenStreetMap (via Nominatim + Overpass), Wikidata, Wikipedia, the World Bank, and a few other open APIs. No scraping of Google Maps, Google Search, or any platform that prohibits automated access — that's a hard line, not a limitation worked around. The one genuinely optional, non-free integration (Google Places, for a phone-number fallback) is opt-in and clearly marked.

Features

Find & Count Places

The main tool. Pick a city (or address, or postal code) and one or more of 90 business categories — restaurants, hotels, pharmacies, banks, gyms, schools, and dozens more, groupable into quick bundles — and get every matching real place OpenStreetMap knows about.

  • Multiple search areas: a city/address, a whole batch of cities at once (e.g. compare Doha + Dubai + Riyadh in one run), your current location ("Near Me"), a shape you draw directly on the map, or a corridor along a driving route between two places (free OSRM routing)
  • Filters: include/exclude keywords, distance from a landmark, maximum results per category
  • Optional enrichment (slower, thorough): finds missing phone numbers by checking each business's own website (including Contact/About pages), flags dead websites, verifies email domains resolve, pulls social links the business itself published, adds elevation data, and — if you add a free Mapillary token — an inline street-level photo preview
  • Live map: clustered markers, a density heatmap toggle, distance rings, color-coded by category
  • Results table: sortable, filterable (has phone / has website / dead site / high data quality), with a data-quality score per result
  • Export: Excel, CSV, GeoJSON, or vCard, straight from the browser

Country Overview

Pick a country and category and see real counts broken down by every city, with a bar chart and CSV export — plus population data and a per-1,000-people rate where available. Or zoom out further to a continent-level report (country-by-country totals across an entire continent in one request).

Compare Searches

Run up to 4 independent searches side by side — different cities, categories, or keywords — and compare totals and data coverage at a glance, with a chart and table.

Search History

Every past search, newest first.

Scrape Any Webpage

Pulls the title, text, tables, and links out of any single public page. Respects robots.txt and will refuse pages that disallow automated access rather than trying to get around it. Falls back to rendering JavaScript (via Playwright) when a page needs it.

Also included

  • A small command-line tool (cli.py) for scripted searches without a browser
  • A public JSON API (/api-docs once running) documenting every endpoint above for your own scripts/tools
  • Light/dark theme, saved search templates, desktop notifications, "did you mean" suggestions for typo'd place names

Install

Requires Python 3.12+ (the pinned numpy/pandas versions in requirements.txt need it — installing on 3.10/3.11 will fail to resolve numpy).

git clone https://github.com/VEN0MXDARK/Scraper.git
cd Scraper

python -m venv venv

# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate

pip install -r requirements.txt
playwright install chromium

# Optional - only needed if you want one of the optional integrations below
cp config_local.example.py config_local.py

Run it

python app.py

Then open http://127.0.0.1:5000 in your browser. That's it — no accounts, no API keys, no setup beyond this.

Optional: paid/keyed integrations

Everything above works with zero configuration. A few extras are available if you want them — all opt-in, all documented with setup steps in config_local.example.py (copy it to config_local.py and fill in only what you want; that file is gitignored, so your keys never get committed):

Integration Free? What it adds
Google Places API No (needs billing) Fallback phone-number lookup for businesses OSM doesn't have a number for
Custom/self-hosted Overpass mirror Yes Use your own Overpass instance instead of the 3 public ones
GeoNames Yes (free account) A second gazetteer to cross-check place names Nominatim can't resolve
Mapillary Yes (free account) Inline street-level photo thumbnails instead of just a link out

Leave any of them blank in config_local.py and that feature quietly stays off — nothing breaks.

How it works

  • Geocoding & search: Nominatim resolves place names to real administrative boundaries (not rectangular bounding boxes, so results near a border don't bleed into the neighboring country/city); Overpass API queries OpenStreetMap's tagged data within that boundary, falling back across 3 free public mirrors with health tracking and backoff
  • Persistence: a local SQLite database (data/scout.db) tracks every place seen across searches, enabling favorites, notes, tags, projects, and diff/comparison views via the API (see /api-docs)
  • Enrichment sources: each business's own website (phone/email/social links, robots.txt-respecting), Wikidata, Wikipedia, open-elevation.com, Mapillary
  • Frontend: plain HTML/CSS/JS, no build step, no framework — every frontend library (Leaflet, Leaflet.draw, Leaflet.heat) is self-hosted under static/vendor/, no CDN dependency at runtime

Project structure

app.py                  Flask routes
scraper.py               Core search/enrichment logic
cli.py                   Command-line entry point
config.py                Settings defaults
config_local.example.py  Template for your own optional settings/keys
config_local.py           Your copy of the above (gitignored, not in the repo)
utils/                    One module per data source/concern
templates/                Server-rendered pages
static/                   CSS, JS, self-hosted vendor libraries
data/, output/            Local SQLite DB and exported files (gitignored)

A note on ethics

This app only ever talks to sources that explicitly allow programmatic access (OpenStreetMap's API, Wikidata, Wikipedia, etc.) or that a website itself allows via robots.txt. It does not scrape Google, Facebook, or any platform whose terms prohibit it, and it does not attempt to bypass anti-bot protections anywhere. If a source says no, this app takes no for an answer.

Feedback & issues

Found a bug, have a feature idea, or a category/data source that should be added? Open an issue on this repo — that's the best way to reach me about this project.

Support this project

This tool is free and always will be — no ads, no paywalled features, no "pro" tier. If it saved you time and you'd like to say thanks, tips are appreciated but never expected:

Binance Pay ID: 92555348

License

MIT — see LICENSE. Use it, modify it, ship it, no strings attached; just keep the copyright notice.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages