Skip to main content
Plays can interact with your data models in powerful ways—searching records, creating new entries, extending schemas with custom columns, and storing temporary values. This guide covers the data-related nodes available in the play editor.

Model search node

Use a model search node Search and retrieve records from any data model or dataset in your workspace. This node queries your data and returns matching records that you can use in subsequent steps of your play. Common use cases:
Use caseExample
Find related recordsLook up all contacts at a company when a deal is created
Check for duplicatesSearch for existing leads before creating new ones
Aggregate dataRetrieve all recent activities for a given account
Cross-referenceMatch records between different data sources

Configuring search criteria

Define your search by specifying:
  • Model — The data model to search (e.g., Contacts, Companies, Deals)
  • Filters — Conditions that records must match
  • Limit — Maximum number of records to return
  • Sort — Order results by a specific field
Use expressions in your filter values to create dynamic searches. For example, filter by {{nodes.start.company_domain}} to find records related to the triggering record.

Model record node

Use a model record node Create new records in compatible data models directly from your plays. This node allows you to write structured data back to models that support record creation.

Supported data models

Model typeSupport
HTTP models✅ Full support for creating records
Custom models✅ Full support for creating records
CRM models (HubSpot, Salesforce, etc.)❌ Use dedicated write nodes instead
Warehouse models (Snowflake, BigQuery)❌ Read-only
Data models synchronized from external services like CRMs don’t support creating records with this node. Use the dedicated write nodes for each service (e.g., HubSpot Create Contact, Salesforce Create Lead) to ensure proper data sync.

Data type behavior

When you create a new record, the first value written to each field determines its data type. This type cannot be changed afterward, so plan your schema carefully before writing production data.

Model custom column node

Use a custom column node Extend synchronized data models with additional columns without modifying the source system. Custom columns let you store Cargo-specific metadata, flags, or computed values alongside your CRM or warehouse data. Examples of custom columns:
  • Lead scoring values calculated by your plays
  • Enrichment timestamps for tracking data freshness
  • Processing flags like needs_review or outreach_sent
  • Aggregated metrics from other data sources

Configuration

PropertyDescription
ModelThe data model to extend with a custom column
Record IDThe primary identifier of the record to update
Column nameName for the custom column (creates it if it doesn’t exist)
ValueThe data to write to this column

Finding the correct record ID

The Record ID field requires the primary identifier from the target data model:
ScenarioHow to get the ID
Same data model as play triggerUse {{nodes.start._id}}
Different data modelUse a Model Search node to find the record, then reference its ID
Known external IDUse the external system’s ID (e.g., HubSpot contact ID)
If you’re updating records in the same data model that triggered your play, {{nodes.start._id}} is the simplest approach. For cross-data-model updates, always use a Model Search node first to locate the target record.

Memory node

Use a memory node Store and access structured data using a key/value store. Memory nodes are useful for persisting values across play runs, counting occurrences, or sharing state between different parts of your workflow.

Scope options

ScopeBehavior
WorkspaceData is shared across all plays in your workspace
PlayData is isolated to the current play

Available actions

ActionDescription
GetRetrieve a value by its key
SetStore a value at a key (overwrites existing)
Get or SetReturn existing value, or set a default if none exists
IncrementAdd to a numeric value (useful for counters)
DecrementSubtract from a numeric value
RemoveDelete a key and its value
Use the Increment action to build simple counters—track how many times a play has run, count leads processed today, or implement rate limiting logic.

Best practices

Before creating or updating records, search for existing entries to prevent duplicates. This is especially important when processing data from multiple sources.
Track when records were last enriched, which providers were used, and whether the enrichment succeeded. This helps you avoid re-processing records unnecessarily.
Use play-scoped memory for play-specific state (like deduplication within a run) and workspace-scoped memory for cross-play coordination (like global rate limiting).
Model Search nodes can return zero results. Add a Branch node to check for empty results and handle them gracefully—either skip processing or create a new record.

Next steps