CrowdCount API

for
api.crowdcount.tech

Integrate CrowdCount data into your own application using these public API endpoints.

How It Works

CrowdCount uses a
location-based
architecture. Each
location
has a unique ID and contains one or more
devices
(Crowd Counters). Counts, entries, and history are all tracked at the location level.


To authenticate, provide
credentials
for
all
devices that belong to the location.


CrowdCount tracks two types of data:

Population
— how many people are currently present (goes up and down)

Entries
— how many people have entered (cumulative, only goes up)

General

Command Description Parameters
GET /ping Returns "pong", indicating that the server is running.
  • None
GET /totalcount Returns the total count of people ever detected across all devices.
  • None
GET /total_entries Returns the total entries ever recorded across all devices.
  • None
GET /check_user Checks if a device exists and returns its online/offline status.
  • device_id (required)
GET /connection_status Returns the connection status of a device.
  • device_id (required)
GET /get_all_map_locations Returns all public map locations with current counts, overcrowding limits, devices, and comparison data.
No authentication required.
  • None
GET /get_all_location_names Returns a list of names of all public map locations.
  • None

Location Lookup

Find the location ID for a device. Use this to get the location_id needed for all history endpoints.

Command Description Parameters
POST /get_locations_for_device Returns all locations that a device belongs to, including each location's location_id, name, current count, overcrowding limit, and member devices.
  • device_id
  • password
POST /get_location Returns details for a single location by ID.
  • location_id
  • credentials

Location History

Retrieve historical population and entry data for a location. All endpoints require location_id plus credentials for all member devices.
Each endpoint also has an average variant that returns the historical average for the same period.

Command Description Parameters
POST /get_location_day_data Hourly population data for a specific day.
  • location_id
  • credentials
  • date
POST /get_location_average_day_data Average hourly population for the same weekday.
Calculated from historical data on matching weekdays.
  • location_id
  • credentials
  • date
POST /get_location_week_data Daily population data for a specific week.
Input any day of the week to get Monday through Sunday. Supports timezone correction via tz_offset_minutes.
  • location_id
  • credentials
  • date
  • tz_offset_minutes (optional)
POST /get_location_average_week_data Average daily population for a week.
Supports timezone correction via tz_offset_minutes.
  • location_id
  • credentials
  • date
  • tz_offset_minutes (optional)
POST /get_location_month_data Daily population data for a specific month.
  • location_id
  • credentials
  • date
POST /get_location_average_month_data Average daily population for a month.
  • location_id
  • credentials
  • date
POST /get_location_year_data Monthly population data for a specific year.
  • location_id
  • credentials
  • year
POST /get_location_average_year_data Average monthly population for a year.
  • location_id
  • credentials
  • year
POST /get_location_entry_day_data Hourly entry data for a specific day.
  • location_id
  • credentials
  • date
POST /get_location_average_entry_day_data Average hourly entry data for the same weekday.
  • location_id
  • credentials
  • date
POST /get_location_entry_week_data Daily entry data for a specific week.
Supports timezone correction via tz_offset_minutes.
  • location_id
  • credentials
  • date
  • tz_offset_minutes (optional)
POST /get_location_average_entry_week_data Average daily entry data for a week.
Supports timezone correction via tz_offset_minutes.
  • location_id
  • credentials
  • date
  • tz_offset_minutes (optional)
POST /get_location_entry_month_data Daily entry data for a specific month.
  • location_id
  • credentials
  • date
POST /get_location_average_entry_month_data Average daily entry data for a month.
  • location_id
  • credentials
  • date
POST /get_location_entry_year_data Monthly entry data for a specific year.
  • location_id
  • credentials
  • year
POST /get_location_average_entry_year_data Average monthly entry data for a year.
  • location_id
  • credentials
  • year
POST /get_location_day_data_detailed 15-minute interval data for a specific day, with averages.
Returns data in local time using tz_offset_minutes. Useful for detailed CSV exports. Keys are time labels like "0:00", "0:15", ..., "23:45" (96 intervals). Response includes both data and average dicts.
  • location_id
  • credentials
  • date (local date)
  • tz_offset_minutes
  • data_type ("count" or "entries")
POST /get_location_insights_bundle Returns all chart data (day, week, year) for both population and entries in a single response.
Replaces up to 16 individual API calls. Includes averages, entry data, and optional second-day data for timezone spanning. Supports timezone-aware week data via tz_offset_minutes.
  • location_id
  • credentials
  • date
  • date2 (optional)
  • week_date
  • year
  • tz_offset_minutes (optional)
POST /get_location_history_bundle Returns chart data (day, week, year) for a single data type in one response.
Replaces up to 8 individual API calls. Use data_type to choose population or entries.
  • location_id
  • credentials
  • date
  • date2 (optional)
  • week_date
  • year
  • data_type ("count" or "entries")
  • tz_offset_minutes (optional)
GET /export_csv Exports population CSV data for a device.
If no date is provided, all data is exported as a zip file.
  • device_id (required)
  • password (required)
  • date (optional)
GET /export_entry_csv Exports entry CSV data for a device.
If no date is provided, all data is exported as a zip file.
  • device_id (required)
  • password (required)
  • date (optional)

Important Notes


The
credentials
parameter is a JSON array of {"device_id", "password"} objects for all devices in the location:

"credentials": [{"device_id": "T1234", "password": "pass1"}, {"device_id": "T5678", "password": "pass2"}]

For locations with a single device, the array will have one entry.


All parameters listed as
required
in history endpoints above. The date format is
yyyy-mm-dd
. For year-based endpoints use a 4-digit year like
2026
.


Server stores data in
UTC
. For hourly day data, convert to your local timezone in your application. For
week endpoints
, you can pass tz_offset_minutes to get timezone-corrected daily totals directly from the server. The value is your UTC offset in minutes, positive east — e.g. -420 for US Mountain (UTC-7), 60 for CET (UTC+1). In JavaScript: new Date().getTimezoneOffset() * -1.


The
bundle endpoints
return all chart data in a single request (day, week, year, averages). Use these to minimize API calls. The date2 parameter handles timezone day-boundary spanning for hourly data — pass the adjacent UTC date that overlaps your local day.


The
detailed day data
endpoint returns 15-minute interval data (96 data points per day) already shifted to your local timezone. Pass your local date and tz_offset_minutes — the server handles the UTC conversion.


The API endpoint is api.crowdcount.tech


Check our server status at crowdcount.tech/status


© 2026 CrowdCount LLC. All rights reserved. | Privacy Policy | Terms of Use