Neighborhood Patterns

❗️

Legacy Product

This page references SafeGraph Patterns, Weekly Patterns, and/or Neighborhood Patterns, legacy products that will no longer be available at the start of 2023. If you are interested in foot traffic data, please contact us and we can refer you to a mobility data partner.

SafeGraph’s Neighborhood Patterns dataset contains footfall data aggregated by census block group (CBG) in the U.S. and dissemination area (DA) in Canada. Learn which day of the week a CBG or DA is busiest, what time of the day a CBG or DA is busiest, where devices that stop during breakfast, lunch, and dinner travel from, and how weekday and weekend demographics compare. This data is ideal for site-selection use cases and other use cases where you need to understand how busy an area is, when it is busy and the demographics of the visitors.

Contents:

Neighborhood Patterns Schema

Column NameDescriptionTypeExample
areaThe designation of the area being described. Canadian DAs have a "CA:" prefix to differentiate from US CBGs.String131000000000
area_typeThe type of area specified in the area column. Canadian DAs will have 'Census Block Group' here.StringCensus Block Group
origin_area_typeThe type of area used in the device_home_areas and device_daytime_areas columns. Canadian DAs have 'Census Block Group' here but both CBGs and DAs will appear in these columns.StringCensus Block Group
date_range_startStart time for measurement period in ISO 8601 format of YYYY-MM-DDTHH:mm:SS±hh:mm (local time with offset from GMT).String2020-03-01T00:00:00-06:00
date_range_endEnd time for measurement period in ISO 8601 format of YYYY-MM-DDTHH:mm:SS±hh:mm (local time with offset from GMT). The end time will be the last day of the month at 12 a.m. local time.String2020-04-01T00:00:00-06:00
day_countsThe frequency of each day of the week that occurred in the date range in local time.JSON {String:Int}{"Monday": 4, "Tuesday": 5, "Wednesday": 4, "Thursday": 4, "Friday": 4, "Saturday": 4, "Sunday": 4 }
raw_stop_countsNumber of stops by devices in our panel to this area during the date range. A stop must have a minimum duration of 1 minute to be included. The count includes stops by devices whose home area is the same as this area.Integer428840
raw_device_countsNumber of unique devices in our panel that stopped in this area during the date range. This includes devices whose home area is the same as this area.Integer109161
stops_by_dayThe number of stops in this area each day (local time) over the covered time period.JSON [Integer][33, 22, 33, 22, 33, 22, 22, 21, 23, 33, 22, 11, 44, 22, 22, 44, 11, 33, 44, 44, 44, 33, 34, 44, 22, 33, 44, 44, 34, 43, 43]
stops_by_each_hourThe number of stops in this area that began each hour (local time) over the covered time period.JSON [Integer][33, 22, 33, 22, 33, 22, 22, 21, 23, 33, 22, 11, 44, 22, 22, 44, 11, 33, 44, 44, 44, 33, 34, 44, 22, 33, 44, 44, 34, 43, 43....]
🛡 device_home_areasThe number of devices that stopped in this area by home origin area. The area itself is included as a potential key. See Determining Home Location and Privacy is applied to this column.JSON {String:Int}{"360610112021": 603, "460610112021": 243, "560610112021": 106, "660610112021": 87, "CA:24110035": 51}
🛡 weekday_device_home_areasThis column is the same as device_home_areas except it only includes those devices that stopped in the area Monday through Friday local time.JSON {String:Int}{"130890212162":91,"131210101101":22,"CA:24110035":20}
🛡 weekend_device_home_areasThis column is the same as device_home_areas except it only includes those visitors that visited on Saturday or Sunday local time.JSON {String:Int}{"130890212162":91,"131210101101":22,"CA:24110035":20}
🛡 breakfast_device_home_areasThis column is the same as the device_home_areas except it only includes those devices that stopped in the area between 6 am and 10:59 am local time.JSON {String:Int}{"130890212162":91,"131210101101":22,"CA:24110035":20}
🛡 lunch_device_home_areasThis column is the same as device_home_areas except it only includes those devices that stopped in the area between 11 am and 2:59 pm local time.JSON {String:Int}{"130890212162":91,"131210101101":22,"CA:24110035":80}
🛡 afternoon_tea_device_home_areasThis column is the same as device_home_areas except it only includes those devices that stopped in the area between 3 pm and 4:59 pm local time.JSON {String:Int}{"130890212162":91,"131210101101":82,"CA:24110035":25}
🛡 dinner_device_home_areasThis column is the same as device_home_areas except it only includes those devices that stopped in the area between 5 pm and 8:59 pm local time.JSON {String:Int}{"130890212162":91,"131210101101":82,"CA:24110035":25}
🛡 nightlife_device_home_areasThis column is the same as device_home_areas except it only includes those devices that stopped in the area between 9 pm and midnight local time.JSON {String:Int}{"130890212162":91,"131210101101":82,"CA:24110035":25}
🛡 work_hours_device_home_areasThis column is the same as device_home_areas except it only includes those devices that stopped in the area between 7:30 am and 5:30 pm Monday through Friday local time.JSON {String:Int}{"130890212162":91,"131210101101":22,"CA:24110035":80}
🛡 work_behavior_device_home_areasThis column is the same as work_hours_device_home_areas but only includes devices that dwelled for at least 6 hours and excludes devices whose visit is in the same gh7 as their home location.JSON {String:Int}{"130890212162":42,"131210101101":11,"CA:24110035":68}
🛡 device_daytime_areasThe number of devices that stopped in this area by that device's primary daytime origin area. See Determining Home Location and Privacy is applied to this columnJSON {String:Int}{"131210101101":987,"131210119002":450,"CA:24110035":447, "130890212163":396,"131210116211":300,"130670302292":282, "130590004023":278,"131350503103":261, ... , ... , "131350502131":50}
distance_from_homeMedian distance from home travelled by devices (of devices whose home we have identified) in meters.Integer29385
distance_from_primary_daytime_locationMedian distance, in meters, traveled to the stopping point(s) within the area by devices from their device_daytime_area (of devices whose device_daytime_area we have identified). We determine device_daytime_area within 100 meters and find the median distance per device (if more than one stop in the area for a device) to calculate the median for all devices.Integer29385
median_dwellMedian dwell time in minutes. Note that we are only including stops that have a dwell of at least 1 minute.Double5
top_same_day_brandBrands that the devices that stopped in this area visited in the same day as the stop in this area. Limited to top 20. The value shown for each brand is a percentage representing: devices going to both the brand and the area / total devices stopping in the area.JSON {String: Integer}{"mcdonalds": 7,"amc": 5,"target": 3}
top_same_month_brandBrands that the devices that stopped in this area visited in the same month as the stop in this area. Limited to top 20. The value shown for each brand is a percentage representing: devices going to both the brand and the area / total devices stopping in the area.JSON {String: Integer}{"mcdonalds": 7,"amc": 5,"target": 3}
popularity_by_each_hourThe number of stops in this area each hour (local time) over the covered time period, regardless of when the stop started. This is a complementary column to stops_by_each_hour.Array[33, 22, 33, 22, 33, 22, 22, 21, 23, 33, 22, 11, 44, 22, 22, 44, 11, 33, 44, 44, 44, 33, 34, 44, 22, 33, 44, 44, 34, 43, 43....]
popularity_by_hour_mondayA 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Monday in the time range.Array[9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628]
popularity_by_hour_tuesdayA 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Tuesday in the time range.Array[9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628]
popularity_by_hour_wednesdayA 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Wednesday in the time range.Array[9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628]
popularity_by_hour_thursdayA 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Thursday in the time range.Array[9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628]
popularity_by_hour_fridayA 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Friday in the time range.Array[9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628]
popularity_by_hour_saturdayA 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Saturday in the time range.Array[9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628]
popularity_by_hour_sundayA 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Sunday in the time range.Array[9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628]
🛡 device_typeThe number of devices that stopped in the area that are using Android vs. iOS.JSON {String: Integer}{"android": 6, "ios": 8}
iso_country_codeThe 2 letter ISO 3166-1 alpha-2 country code of the area.StringCA
regionWhen iso_country_code == US, then this is the USA state or territory. When iso_country_code == CA, then this is the Canadian Province or territory.StringMD
yThe year of the measurement period (included for easier filtering)Integer2021
mThe month of the measurement period (included for easier filtering)Integer6

🛡 We do not report data unless at least 2 visitors are observed from that group. If there are between 2 and 4 visitors this is reported as 4. See more on privacy here.

Panel Overview Data

Along with the Neighborhood Patterns file, we also deliver Panel Overview Data (see below) to help you better understand the context of the data appearing in Neighborhood Patterns. In particular, the size of the panel of devices changes from month to month, so understanding the make-up of the panel helps to normalize stop counts over time.

Home Location Distributions by State/Census Block Group

[home_panel_summary.csv]

Column NameDescriptionTypeExample
yearCalendar YearInteger2018
monthCalendar month starting from 1 as JanuaryInteger1
regionLowercase abbreviation of U.S. state or territory, or the Canadian province or territoryStringny
iso_country_codeThe 2 letter ISO 3166-1 alpha-2 country code.StringUS
census_block_groupFIPS code for the U.S. Census block group or PR-CD-DA code for the Canadian Dissemination Area (prefixed with "CA:")String530330080012
number_devices_residingNumber of distinct devices observed with a primary nighttime location in the specified census block group or dissemination area.Integer54481
number_devices_primary_daytimeNumber of distinct devices observed with a primary daytime location in the specified census block group or dissemination area.Integer54482

Key Concepts

Generating Neighborhood Patterns

Neighborhood Patterns uses the same underlying mobile device data as Monthly and Weekly Patterns, but is aggregated to census block groups and dissemination areas rather than POIs.

The data was generated by:

  • Creating clusters of pings from a panel of anonymous mobile devices using DBSCAN.
  • Filtering out any cluster that had a duration of less than 1 minute. (Note that this is different than a "visit" in Monthly and Weekly Patterns, which has a threshold of 4 minutes).
  • Counting each resulting cluster as a "stop."
  • Aggregating the stops by census block group and dissemination areas.

The data is released monthly (by the 7th) with each monthly release reflecting what occurred during the prior calendar month.

Privacy

To preserve privacy, we apply differential privacy techniques to the following columns: device_home_areas, work_hours_device_home_areas, work_behavior_device_home_areas, weekday_device_home_areas, weekend_device_home_areas, breakfast_device_home_areas, lunch_device_home_areas, afternoon_tea_device_home_areas, dinner_device_home_areas, nightlife_device_home_areas, device_daytime_areas, and device_type.

We have added Laplacian noise to the values in these columns. After adding noise, only attributes (e.g., a census block group) with at least two devices are included in the data. For these columns, we do not report data unless at least 2 visitors are observed from that group. If there are between 2 and 4 visitors, this is reported as 4.

Determining Home Location

Neighborhood Patterns uses the same logic as the Patterns product to determine home location, for the following columns and files:

  • device_home_areas
  • All of the *_device_home_areas columns
  • distance_from_home
  • home_panel_summary.csv

Known Data Issues or Artifacts

See the Known Issues or Data Artifacts in Developer Tools for more information.


What’s Next