Skip to content

Workspace API

Accounts

Save and annotate the global accounts you care about. Search returns only the ones you have saved to your workspace.

You save global Parcel accounts to your workspace and annotate them with your own data. Workspace account search returns only the accounts you have saved, not the full global dataset. To start tracking a new account, find it via the Data API and then upsert it by domain or id.

Fields you set

These fields are written by your team via the upsert endpoint.

FieldTypeNotes
icp_tierstring | nullYour ICP classification for this account. One of tier_1, tier_2, tier_3, disqualified, or null (unset). Setting this field schedules an Atlas recompute.
workspace_statusstring | nullYour workflow state for this account (for example, "active", "churned"). Any string value or null.
notesstring | nullFree-text notes for your team. Explicit null clears the value.
tagsstring[]Arbitrary labels. Full-replace on every write (sending ["boston"] replaces the entire tag set).

Fields Parcel computes (read-only)

These fields are computed by Parcel based on market signals. You cannot set them directly.

FieldTypeNotes
atlas_scoreinteger | nullAtlas activity score, 0 to 100. Higher scores indicate more recent and more significant pipeline activity. null until enough signal data is available.
atlas_trendstring | nullDirection of recent Atlas score movement: "up", "down", or "flat". null until a trend can be established.

Setting icp_tier on an account schedules a fresh Atlas recompute so that your tier assignment is reflected in a subsequent atlas_score.

Profile fields (GET only)

A single-account GET also returns the firm’s profile, taken from its own website. Search results leave it out.

FieldTypeNotes
hq_addressstring | nullHeadquarters, from the firm’s own site. Null means the site does not state one
hq_locationobject | null{ lat, lng } where the headquarters address geocoded exactly; null otherwise
public_phonestring | nullThe firm’s main line. Never a person’s direct line or an extension
public_emailstring | nullA shared mailbox only (for example info@), never a person’s address
specialtiesstring[]Services the firm lists on its site. Empty means none is stated
descriptionstring | nullA quote from the firm’s own site
founded_yearinteger | nullYear founded, as the firm states it
account_types_sourcestringenriched: the types came from the firm’s own site; resolved: from the roles it played on projects

Filters

Default sort: updated_at desc

Filter keyTypeNotes
icp_tierfieldOne of tier_1, tier_2, tier_3, disqualified. Array value = OR.
workspace_statusfieldYour workflow status string. Exact match.
tagsfieldTag value. Array value = OR.
namefieldOrganization name. Supports fuzzy match.
cityfieldCity name. exact_match: false (default) = fuzzy.
statefieldState code, for example "MA".
account_typefieldMatches against account_types[]. Array value = OR.

Sort keys: updated_at, atlas_score, name, created_at

Range keys: atlas_score

icp_tier and account_type are enum-backed: a value outside the allowed set returns 400 (not zero rows), and they do not accept exact_match since a closed vocabulary is always exact. See Errors.

Relational filters

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

KeyInner filter fields
has_projectstage, primary_use, city, name, residential_units (range)
without_projectstage, primary_use, city, name, residential_units (range)
has_signalsignal_type, filed_at (range)
without_signalsignal_type, filed_at (range)
has_contacttitle, name
without_contacttitle, name

Each without_* key takes the same inner fields as its has_* twin, but matches your saved accounts with NO related record satisfying the inner criteria (NOT EXISTS) instead of at least one. See Filtering for the semantics.

Includes

Valid include keys for GET /workspace/accounts/{id}: projects, contacts, signals.

Example: GET /workspace/accounts/<id>?include=projects&include=signals

Search example

The query below finds your tier 1 accounts that have a permit_filed signal in the last 90 days, sorted by Atlas score descending.

Search workspace accounts
curl -X POST https://api.parcelengineering.com/api/v1/workspace/accounts/search \
-H "Authorization: Bearer pcl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"filters": {
"icp_tier": { "value": "tier_1" },
"has_signal": {
"signal_type": { "value": "permit_filed" },
"filed_at": { "min": "2026-03-31" }
}
},
"sort": { "field": "atlas_score", "order": "desc" },
"limit": 25
}'
Response
{
"data": [
{
"id": "8a1f3c2e-0001-4b7d-9e5a-000000000001",
"name": "Acme Development Group",
"account_types": ["developer"],
"domains": ["acmedev.com"],
"website": "https://acmedev.com",
"icp_tier": "tier_1",
"workspace_status": "active",
"notes": "Met at BuildBoston 2025",
"tags": ["boston", "developer"],
"atlas_score": 87,
"atlas_trend": "up"
}
],
"metadata": {
"total": 4,
"total_is_capped": false,
"credits": 4
}
}

The data array is trimmed to one record above. A page returning 4 accounts costs 4 credits (1 per row returned).

See also