This page explains the User Profile data model — what a profile contains and how it’s built. For the SDK methods used to set and update profile properties, see the People SDK Reference.
Overview
A user profile in Cryptique is the unified record for a single person. It aggregates three streams of data: off-chain behavioral events, connected wallet addresses, and on-chain transactions. Every profile is keyed on adistinct_id.
Profile Structure
How Profiles Are Created
Step 1 — Anonymous profile
When a user first visits your site, Cryptique creates an anonymous profile with a generateddistinct_id (e.g. anon_abc123). This profile immediately starts accumulating behavioral events.
Step 2 — Identity resolution
When you callCryptique.identify('your_user_id'), the anonymous profile is merged into (or converted to) an identified profile keyed on your ID. See the Identify SDK Reference for full merge behavior.
Step 3 — Property enrichment
Profile properties are added from these sources:| Source | How |
|---|---|
identify() | Sets the distinct_id |
people.set/increment/append | Sets custom properties via SDK |
Cryptique.walletAddress() | Links a wallet address to the profile |
| Wallet enrichment (automatic) | Adds on-chain properties once a wallet is linked |
identify() response | Can restore group memberships server-side (see Groups) |
set_group and set entity-level properties with get_group(key, id).set(...).
Wallet Enrichment
Once a wallet address is linked to a profile, Cryptique automatically queries the blockchain and adds the following properties:| Property | Description |
|---|---|
wallet_age_days | Days since the wallet’s first transaction |
total_transaction_count | Total transactions across all tracked chains |
net_worth_usd | Approximate portfolio value across supported chains |
eth_balance (and per-chain equivalents) | Native token balance per chain |
dapps_used | List of dApps the wallet has interacted with |
is_whale | Boolean, derived from net worth threshold |
Profile Timeline
In the dashboard, each profile displays a unified timeline of all off-chain events and on-chain transactions:Searching Profiles
Find any profile by:distinct_id— direct lookupwallet_address— finds any profile with that wallet linkedemail— if set viaidentify()orpeople.set()- Any custom property — e.g.
plan = 'enterprise'
Profile Properties vs Event Properties
| Profile Properties | Event Properties | |
|---|---|---|
| Scope | User-level | Single event |
| Persistence | Stored on profile, mutable | Immutable, stored with event |
| How to set | people.set(), people.increment(), etc. | Second argument to Cryptique.track() |
| Use case | Who the user is | What happened in this event |
Privacy
Wallet addresses are stored as-is and are pseudonymous — they are not inherently linked to a real-world identity unless the user explicitly provides identifying information (e.g. viaidentify() with an email). See Privacy & Compliance for full details on how wallet data is handled.
Next Steps
People SDK Reference
Set and manage profile properties
Groups
Companies, teams, and group profiles
Wallet Methods
Link wallet addresses to profiles