Data API
Data Model
How the four Parcel datasets relate to each other.
The Data API exposes four datasets. All record ids are UUIDs.
The four datasets
| Dataset | What it represents |
|---|---|
accounts | Organizations: developers, architects, engineers, GCs, agencies, law firms, consultants, and others active in the construction pipeline. |
contacts | People at accounts. Each contact has an account_id linking it to its parent account. |
projects | Individual construction or development projects tracked through the permitting and entitlement lifecycle. |
signals | Timeline events on a project (permits filed, approvals, team updates, etc.). Each signal has a project_id. |
Relationships
accounts ──< contacts (one account, many contacts)projects ──< signals (one project, many signals)accounts >──< projects (many-to-many via project_accounts, with a role)contacts >──< projects (many-to-many via project_contacts, with a role)| Relationship | How it works |
|---|---|
| Contact → Account | contacts.account_id is a direct FK to accounts.id. |
| Account ↔ Project | Joined through project_accounts. Each row carries a role (e.g., developer, architect). |
| Contact ↔ Project | Joined through project_contacts. Each row carries a role. |
| Signal → Project | signals.project_id is a direct FK to projects.id. |
Convenience count fields
Each dataset includes pre-computed *_count fields so you can gauge relationship depth without a separate query:
| Dataset | Count fields |
|---|---|
accounts | projects_count, contacts_count |
contacts | projects_count |
projects | accounts_count, contacts_count, signals_count |
Signals do not carry count fields.
Traversing relationships
Use the include parameter on GET /data/{dataset}/{id} to embed related records directly in the response. For example, fetching a project with include=accounts&include=signals returns the project record with its related accounts array and signals array nested under those keys.
See Related Records for the full include reference per dataset.
Relational filters in a search let you filter one dataset by properties of a related dataset. For example, search for accounts that have a project in stage approved in Boston. See Filtering for the grammar.