Objects
Objects
Outrun standardizes all data into core object types that represent the fundamental building blocks of business data. These objects enable seamless data synchronization across different systems regardless of their native data formats.
Universal Data Model
Rather than forcing complex custom mappings, Outrun uses four standardized objects that represent how businesses naturally think about their data - making integration intuitive and reliable.
The Four Object Types
People
Individual humans in your business ecosystem
- • Contacts, Leads, Users
- • Customers, Prospects
- • Team Members, Authors
- • Anyone with personal identity
Organizations
Companies and business entities
- • Companies, Accounts
- • Customers, Prospects
- • Partners, Vendors
- • Any business entity
Analytics
Measurable data points and metrics
- • Search analytics data
- • Performance metrics
- • Rankings and impressions
- • Stored in typed tables per data source
Relationships
Connections between other objects
- • Person-to-Organization links
- • Hierarchical structures
- • Business relationships
- • Association mappings
People Objects
People represent individual humans across all your systems, providing a unified view of contacts, leads, users, and team members.
Database Schema
People are stored in the people table within each tenant database:
{
"emailAddress": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Corp",
"phoneNumbers": [{ "type": "work", "number": "+1-555-0123" }],
"externalIds": {
"hubspot": "12345",
"pipedrive": "67890"
},
"record": {
"jobTitle": "Marketing Manager",
"department": "Marketing",
"location": "San Francisco, CA",
"linkedInUrl": "https://linkedin.com/in/johndoe",
"website": "https://johndoe.com"
},
"labels": ["customer", "enterprise"],
"classifications": [{ "type": "lead", "score": 85 }],
"assignedTo": "sales-team",
"metadata": { "qualityScore": 0.95, "sources": ["hubspot", "pipedrive"] },
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T14:22:00Z"
}
The emailAddress column is indexed for fast lookups. The externalIds JSONB column tracks IDs across all connected source systems. Extended fields are stored in the record JSONB column, keeping the core columns lean while preserving all source data.
Source System Mappings
HubSpot → People
// HubSpot Contact
{
"vid": 12345,
"properties": {
"email": "[email protected]",
"firstname": "John",
"lastname": "Doe",
"jobtitle": "Marketing Manager",
"company": "Acme Corp",
"phone": "+1-555-0123"
}
}
// Becomes Person Object
{
"type": "Person",
"email": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"jobTitle": "Marketing Manager",
"company": "Acme Corp",
"phone": "+1-555-0123"
}
Pipedrive → People
// Pipedrive Person
{
"id": 123456,
"primary_email": "[email protected]",
"first_name": "Jane",
"last_name": "Smith",
"org_name": "Startup Inc",
"job_title": "CEO"
}
// Becomes Person Object
{
"type": "Person",
"email": "[email protected]",
"firstName": "Jane",
"lastName": "Smith",
"company": "Startup Inc",
"jobTitle": "CEO"
}
Zoho CRM → People
// Zoho Contact
{
"Email": "[email protected]",
"First_Name": "Mike",
"Last_Name": "Johnson",
"Account_Name": "Enterprise Solutions",
"Title": "VP Sales"
}
// Becomes Person Object
{
"type": "Person",
"email": "[email protected]",
"firstName": "Mike",
"lastName": "Johnson",
"company": "Enterprise Solutions",
"jobTitle": "VP Sales"
}
Destination System Mappings
People → HubSpot Contacts
// Person Object
{
"type": "Person",
"email": "[email protected]",
"firstName": "Sarah",
"lastName": "Wilson",
"jobTitle": "Product Manager"
}
// Becomes HubSpot Contact
{
"properties": {
"email": "[email protected]",
"firstname": "Sarah",
"lastname": "Wilson",
"jobtitle": "Product Manager",
"hs_lead_status": "NEW",
"lifecyclestage": "lead"
}
}
People → Pipedrive Persons
// Person Object (New Lead)
{
"type": "Person",
"email": "[email protected]",
"firstName": "Alex",
"lastName": "Chen",
"company": "Prospect Corp"
}
// Becomes Pipedrive Person
{
"name": "Alex Chen",
"email": [{"value": "[email protected]", "primary": true}],
"org_id": null,
"visible_to": "3",
"label": "New Lead"
}
Organizations Objects
Organizations represent companies, accounts, and business entities across all your systems.
Database Schema
Organizations are stored in the organizations table within each tenant database:
{
"companyName": "Acme Corporation",
"domain": "acme.com",
"externalIds": {
"hubspot": "67890",
"pipedrive": "234567"
},
"record": {
"website": "https://acme.com",
"industry": "Technology",
"size": "500-1000 employees",
"revenue": 50000000,
"location": "San Francisco, CA",
"address": {
"street": "123 Market Street",
"city": "San Francisco",
"state": "CA",
"postalCode": "94105",
"country": "United States"
},
"phone": "+1-555-0456",
"description": "Leading technology solutions provider",
"foundedYear": 2010
},
"labels": ["enterprise", "technology"],
"metadata": { "qualityScore": 0.92, "sources": ["hubspot", "pipedrive"] },
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T16:45:00Z"
}
The domain column is indexed for fast lookups. The externalIds JSONB column tracks IDs across all connected source systems.
Source System Mappings
HubSpot → Organizations
// HubSpot Company
{
"companyId": 67890,
"properties": {
"name": "Tech Innovations Ltd",
"domain": "techinnovations.com",
"industry": "Software",
"numberofemployees": "250",
"annualrevenue": "25000000"
}
}
// Becomes Organization Object
{
"type": "Organization",
"name": "Tech Innovations Ltd",
"domain": "techinnovations.com",
"industry": "Software",
"size": "250",
"revenue": 25000000
}
Pipedrive → Organizations
// Pipedrive Organization
{
"id": 345678,
"name": "Global Enterprises Inc",
"address": "123 Industrial Blvd",
"people_count": 5000
}
// Becomes Organization Object
{
"type": "Organization",
"name": "Global Enterprises Inc",
"address": "123 Industrial Blvd",
"size": "5000"
}
Destination System Mappings
Organizations → Pipedrive Organizations
// Organization Object
{
"type": "Organization",
"name": "Future Systems Corp",
"website": "https://futuresystems.com",
"industry": "Technology",
"revenue": 75000000
}
// Becomes Pipedrive Organization
{
"name": "Future Systems Corp",
"visible_to": "3",
"custom_fields": {
"website": "https://futuresystems.com",
"industry": "Technology"
}
}
Analytics Data
Analytics and metrics data from sources like Google Search Console are stored in dedicated typed tables rather than a generic object. This gives each data source a purpose-built schema with proper column types for efficient querying.
Search Analytics Data Table
Search performance data is stored in the search_analytics_data table:
{
"site": "https://example.com",
"date": "2024-01-15",
"query": "data synchronization",
"page": "/products/data-sync",
"device": "desktop",
"country": "United States",
"clicks": 1250,
"impressions": 5420,
"ctr": 0.23,
"position": 3.2,
"jobId": "gsc_job_abc123"
}
The table is indexed on (site, date) for efficient time-range queries.
Source System Mappings
Google Search Console → Search Analytics Data
// GSC Search Analytics API Response
{
"keys": ["data synchronization"],
"clicks": 1250,
"impressions": 5420,
"ctr": 0.23,
"position": 3.2,
"date": "2024-01-15"
}
// Stored in search_analytics_data table
{
"site": "https://example.com",
"date": "2024-01-15",
"query": "data synchronization",
"clicks": 1250,
"impressions": 5420,
"ctr": 0.23,
"position": 3.2
}
Usage
Analytics data is used for reporting, dashboards, and AI-powered insights within Outrun. It can be queried alongside your CRM and support data to provide a complete view of business performance.
Relationships Objects
Relationships represent connections between People and Organizations, maintaining the context of how entities are related.
Database Schema
Relationships are stored in the relationships table within each tenant database:
{
"sourceType": "Person",
"sourceEntityId": "[email protected]",
"targetType": "Organization",
"targetEntityId": "acme.com",
"relationshipType": "employee",
"externalIds": {
"hubspot": "association_456789"
},
"record": {
"department": "Marketing",
"role": "Manager",
"reportingStructure": "direct"
},
"metadata": {
"strength": 0.95,
"verified": true,
"startDate": "2022-03-15T00:00:00Z"
},
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
The table is indexed on (source_type, source_entity_id) and (target_type, target_entity_id) for efficient relationship lookups in both directions.
Source System Mappings
HubSpot → Relationships
// HubSpot Contact-Company Association
{
"contactId": 12345,
"companyId": 67890,
"associationType": "CONTACT_TO_COMPANY"
}
// Plus Contact Data
{
"email": "[email protected]",
"jobtitle": "Marketing Manager"
}
// Plus Company Data
{
"domain": "acme.com",
"name": "Acme Corp"
}
// Becomes Relationship Object
{
"type": "Relationships",
"fromType": "Person",
"fromId": "[email protected]",
"toType": "Organization",
"toId": "acme.com",
"relationshipType": "employee",
"metadata": {
"jobTitle": "Marketing Manager"
}
}
Pipedrive → Relationships
// Pipedrive Person with Organization
{
"Person": {
"id": 123456,
"primary_email": "[email protected]",
"org_id": 234567
},
"Organization": {
"id": 234567,
"name": "Enterprise Solutions"
}
}
// Becomes Relationship Object
{
"type": "Relationships",
"fromType": "Person",
"fromId": "[email protected]",
"toType": "Organization",
"toId": "enterprise.com",
"relationshipType": "contact",
"verified": true
}
Relationship Types
Common Relationship Types
- employee: Person works for Organization
- contact: Person is a contact at Organization
- customer: Person/Organization is a customer
- prospect: Person/Organization is a potential customer
- partner: Business partnership relationship
- vendor: Supplier relationship
- consultant: Professional services relationship
Relationship Strength
Relationships include a strength score (0-1) indicating confidence:
- 1.0: Explicitly defined in source system
- 0.8-0.9: Strong indicators (email domain match, explicit association)
- 0.6-0.7: Moderate indicators (inferred from data patterns)
- 0.3-0.5: Weak indicators (possible connection)
- 0.0-0.2: Very uncertain connection
Object Interactions
Cross-Object Dependencies
People ↔ Organizations
// Person references Organization
{
"type": "Person",
"email": "[email protected]",
"company": "Acme Corp" // References Organization
}
// Organization contains People
{
"type": "Organization",
"domain": "acme.com",
"employees": ["[email protected]", "[email protected]"] // References People
}
// Explicit Relationship
{
"type": "Relationships",
"fromType": "Person",
"fromId": "[email protected]",
"toType": "Organization",
"toId": "acme.com",
"relationshipType": "employee"
}
Analytics → People/Organizations
Analytics data can be correlated with People and Organizations through shared identifiers like email domains and company names, enabling cross-functional reporting and AI-driven insights.
Data Flow Examples
Complete Customer Record
// 1. Person Object
{
"type": "Person",
"email": "[email protected]",
"firstName": "Alex",
"lastName": "Chen",
"jobTitle": "CEO"
}
// 2. Organization Object
{
"type": "Organization",
"name": "Startup Inc",
"domain": "startup.com",
"industry": "Technology"
}
// 3. Relationship Object
{
"type": "Relationships",
"fromType": "Person",
"fromId": "[email protected]",
"toType": "Organization",
"toId": "startup.com",
"relationshipType": "employee"
}
// 4. Analytics Data (search_analytics_data table)
{
"site": "startup.com",
"date": "2024-01-15",
"query": "startup inc reviews",
"clicks": 320,
"impressions": 1250,
"ctr": 0.256,
"position": 2.1
}
Object Validation & Quality
Data Quality Checks
- Email Validation: Valid email format for People
- Domain Validation: Valid domain format for Organizations
- Relationship Consistency: Valid references between objects
- Metric Validation: Appropriate data types for analytics values
Quality Scoring Factors
- Completeness: Percentage of required fields populated
- Accuracy: Validation against known patterns
- Consistency: Agreement across multiple sources
- Freshness: How recently the data was updated
Duplicate Detection
- People: Email-based deduplication with name similarity
- Organizations: Domain-based with name fuzzy matching
- Relationships: Source/target entity pair uniqueness
- Analytics: Composite uniqueness per data source (e.g. site + date + query for search data)
Best Practices
Object Design
- Use Standard Fields: Leverage common fields for better compatibility
- Custom Fields: Use customFields object for source-specific data
- Consistent Naming: Follow naming conventions across objects
- Quality Metadata: Include quality scores and validation results
Relationship Management
- Explicit Relationships: Create Relationship objects for important connections
- Strength Scoring: Use appropriate strength scores for confidence levels
- Bidirectional Links: Maintain references in both directions when needed
- Lifecycle Management: Track relationship start/end dates
Performance Optimization
- Indexing Strategy: Index on primary identifiers (email, domain)
- Batch Processing: Process related objects together
- Caching: Cache frequently accessed object relationships
- Incremental Updates: Only sync changed objects
Next Steps
Learn About Standardization
Understand how raw data transforms into these standardized objects.
Standardization Process →Understanding these four object types is key to leveraging Outrun's standardization power - they provide the universal language that enables seamless data synchronization across any system.