Skip to content

Data API

Signals

Search and retrieve timeline events on projects tracked in Parcel, including permits, entitlements, public reviews, construction loans, and completions.

Signals are discrete timeline events on a project: a permit filed, an entitlement approved, a public review opened, a construction loan recorded, a project completed, and more. Each signal carries a type, a track, a summary, a filing date, and optional reported cost and size figures extracted from source documents.

Fields

FieldTypeNotes
iduuidUnique signal identifier
project_iduuidParent project
signal_typestringEvent type. See Signal types for all 19 values
trackstringProcessing track. See Signal types
summarystring | nullHuman-readable summary of the event
filed_atstring | nullISO 8601 date the document was filed (YYYY-MM-DD)
discovered_atstringISO 8601 timestamp Parcel first discovered this signal
reported_cost_usdint | nullConstruction cost reported in the source document
reported_gross_floor_area_sfint | nullGross floor area reported in the source document
reported_unitsint | nullUnit count reported in the source document
created_atstringISO 8601 timestamp the signal was created in Parcel

Filters

Default sort: filed_at desc

Filter keyTypeNotes
signal_typefieldEvent type. Array value = OR. Allowed values: project_announcement, pre_application, site_acquisition, demolition_permit, site_prep, entitlement_application, environmental_review, public_review, rfp, entitlement_approval, entitlement_denial, withdrawal, expiration, permit_filed, permit_issued, construction_loan, under_construction, team_update, completion
project_idfieldFilter to signals on a specific project (UUID)

Sort keys: filed_at (default, desc), discovered_at

Range keys: filed_at (date, YYYY-MM-DD), discovered_at (date, YYYY-MM-DD)

Range filter shape: { "min": "YYYY-MM-DD", "max": "YYYY-MM-DD" }. Both min and max are optional and inclusive.

Relational filters

Use relational filters to match signals based on properties of their related records.

KeyInner filter fields
for_projectstage, primary_use, city, residential_units (range)
for_accountname, account_type

Includes

Valid include keys for GET /data/signals/{id}: project (to-one, embeds an object), accounts.

Example: GET /data/signals/<id>?include=project&include=accounts

Search example

Search signals
curl -X POST https://api.parcelengineering.com/api/v1/data/signals/search \
-H "Authorization: Bearer pcl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"filters": {
"signal_type": { "value": "permit_issued" },
"filed_at": { "min": "2025-01-01" },
"for_project": {
"city": { "value": "Boston" },
"stage": { "value": "approved" }
}
},
"sort": { "field": "filed_at", "order": "desc" },
"limit": 10
}'
Response
{
"data": [
{
"id": "8a1f3c2e-0004-4b7d-9e5a-000000000004",
"project_id": "8a1f3c2e-0003-4b7d-9e5a-000000000003",
"signal_type": "permit_issued",
"track": "funnel",
"summary": "Building permit issued for new 8-story mixed-use residential development at 1250 Boylston St.",
"filed_at": "2025-11-14",
"discovered_at": "2025-11-15T04:12:00Z",
"reported_cost_usd": 62000000,
"reported_gross_floor_area_sf": 180000,
"reported_units": 120,
"created_at": "2025-11-15T04:12:00Z"
}
],
"metadata": {
"total": 512,
"total_is_capped": false,
"credits": 10
}
}

The data array is trimmed to one record above; a full limit: 10 page returns 10 records and costs 10 credits (1 per record returned).

See also