- Introduction
-
Getting Started
- Creating an Account in Hevo
- Subscribing to Hevo via AWS Marketplace
- Connection Options
- Familiarizing with the UI
- Creating your First Pipeline
- Data Loss Prevention and Recovery
-
Data Ingestion
- Types of Data Synchronization
- Ingestion Modes and Query Modes for Database Sources
- Ingestion and Loading Frequency
- Data Ingestion Statuses
- Deferred Data Ingestion
- Handling of Primary Keys
- Handling of Updates
- Handling of Deletes
- Hevo-generated Metadata
- Best Practices to Avoid Reaching Source API Rate Limits
-
Edge
- Getting Started
- Data Ingestion
- Core Concepts
- Pipelines
- Sources
- Destinations
- Alerts
- Custom Connectors
- Releases
-
Data Loading
- Loading Data in a Database Destination
- Loading Data to a Data Warehouse
- Optimizing Data Loading for a Destination Warehouse
- Deduplicating Data in a Data Warehouse Destination
- Manually Triggering the Loading of Events
- Scheduling Data Load for a Destination
- Loading Events in Batches
- Data Loading Statuses
- Data Spike Alerts
- Name Sanitization
- Table and Column Name Compression
- Parsing Nested JSON Fields in Events
-
Pipelines
- Data Flow in a Pipeline
- Familiarizing with the Pipelines UI
- Working with Pipelines
- Managing Objects in Pipelines
- Pipeline Jobs
-
Transformations
-
Python Code-Based Transformations
- Supported Python Modules and Functions
-
Transformation Methods in the Event Class
- Create an Event
- Retrieve the Event Name
- Rename an Event
- Retrieve the Properties of an Event
- Modify the Properties for an Event
- Fetch the Primary Keys of an Event
- Modify the Primary Keys of an Event
- Fetch the Data Type of a Field
- Check if the Field is a String
- Check if the Field is a Number
- Check if the Field is Boolean
- Check if the Field is a Date
- Check if the Field is a Time Value
- Check if the Field is a Timestamp
-
TimeUtils
- Convert Date String to Required Format
- Convert Date to Required Format
- Convert Datetime String to Required Format
- Convert Epoch Time to a Date
- Convert Epoch Time to a Datetime
- Convert Epoch to Required Format
- Convert Epoch to a Time
- Get Time Difference
- Parse Date String to Date
- Parse Date String to Datetime Format
- Parse Date String to Time
- Utils
- Examples of Python Code-based Transformations
-
Drag and Drop Transformations
- Special Keywords
-
Transformation Blocks and Properties
- Add a Field
- Change Datetime Field Values
- Change Field Values
- Drop Events
- Drop Fields
- Find & Replace
- Flatten JSON
- Format Date to String
- Format Number to String
- Hash Fields
- If-Else
- Mask Fields
- Modify Text Casing
- Parse Date from String
- Parse JSON from String
- Parse Number from String
- Rename Events
- Rename Fields
- Round-off Decimal Fields
- Split Fields
- Examples of Drag and Drop Transformations
- Effect of Transformations on the Destination Table Structure
- Transformation Reference
- Transformation FAQs
-
Python Code-Based Transformations
-
Schema Mapper
- Using Schema Mapper
- Mapping Statuses
- Auto Mapping Event Types
- Manually Mapping Event Types
- Modifying Schema Mapping for Event Types
- Schema Mapper Actions
- Fixing Unmapped Fields
- Resolving Incompatible Schema Mappings
- Resizing String Columns in the Destination
- Changing the Data Type of a Destination Table Column
- Schema Mapper Compatibility Table
- Limits on the Number of Destination Columns
- File Log
- Troubleshooting Failed Events in a Pipeline
- Mismatch in Events Count in Source and Destination
- Audit Tables
- Activity Log
-
Pipeline FAQs
- Can multiple Sources connect to one Destination?
- What happens if I re-create a deleted Pipeline?
- Why is there a delay in my Pipeline?
- Can I change the Destination post-Pipeline creation?
- Why is my billable Events high with Delta Timestamp mode?
- Can I drop multiple Destination tables in a Pipeline at once?
- How does Run Now affect scheduled ingestion frequency?
- Will pausing some objects increase the ingestion speed?
- Can I see the historical load progress?
- Why is my Historical Load Progress still at 0%?
- Why is historical data not getting ingested?
- How do I set a field as a primary key?
- How do I ensure that records are loaded only once?
- Events Usage
-
Sources
- Free Sources
-
Databases and File Systems
- Data Warehouses
-
Databases
- Connecting to a Local Database
- Amazon DocumentDB
- Amazon DynamoDB
- Elasticsearch
-
MongoDB
- Generic MongoDB
- MongoDB Atlas
- Support for Multiple Data Types for the _id Field
- Example - Merge Collections Feature
-
Troubleshooting MongoDB
-
Errors During Pipeline Creation
- Error 1001 - Incorrect credentials
- Error 1005 - Connection timeout
- Error 1006 - Invalid database hostname
- Error 1007 - SSH connection failed
- Error 1008 - Database unreachable
- Error 1011 - Insufficient access
- Error 1028 - Primary/Master host needed for OpLog
- Error 1029 - Version not supported for Change Streams
- SSL 1009 - SSL Connection Failure
- Troubleshooting MongoDB Change Streams Connection
- Troubleshooting MongoDB OpLog Connection
-
Errors During Pipeline Creation
- SQL Server
-
MySQL
- Amazon Aurora MySQL
- Amazon RDS MySQL
- Azure MySQL
- Generic MySQL
- Google Cloud MySQL
- MariaDB MySQL
-
Troubleshooting MySQL
-
Errors During Pipeline Creation
- Error 1003 - Connection to host failed
- Error 1006 - Connection to host failed
- Error 1007 - SSH connection failed
- Error 1011 - Access denied
- Error 1012 - Replication access denied
- Error 1017 - Connection to host failed
- Error 1026 - Failed to connect to database
- Error 1027 - Unsupported BinLog format
- Failed to determine binlog filename/position
- Schema 'xyz' is not tracked via bin logs
- Errors Post-Pipeline Creation
-
Errors During Pipeline Creation
- MySQL FAQs
- Oracle
-
PostgreSQL
- Amazon Aurora PostgreSQL
- Amazon RDS PostgreSQL
- Azure PostgreSQL
- Generic PostgreSQL
- Google Cloud PostgreSQL
- Heroku PostgreSQL
-
Troubleshooting PostgreSQL
-
Errors during Pipeline creation
- Error 1003 - Authentication failure
- Error 1006 - Connection settings errors
- Error 1011 - Access role issue for logical replication
- Error 1012 - Access role issue for logical replication
- Error 1014 - Database does not exist
- Error 1017 - Connection settings errors
- Error 1023 - No pg_hba.conf entry
- Error 1024 - Number of requested standby connections
- Errors Post-Pipeline Creation
-
Errors during Pipeline creation
-
PostgreSQL FAQs
- Can I track updates to existing records in PostgreSQL?
- How can I migrate a Pipeline created with one PostgreSQL Source variant to another variant?
- How can I prevent data loss when migrating or upgrading my PostgreSQL database?
- Why do FLOAT4 and FLOAT8 values in PostgreSQL show additional decimal places when loaded to BigQuery?
- Why is data not being ingested from PostgreSQL Source objects?
- Troubleshooting Database Sources
- Database Source FAQs
- File Storage
- Engineering Analytics
- Finance & Accounting Analytics
-
Marketing Analytics
- ActiveCampaign
- AdRoll
- Amazon Ads
- Apple Search Ads
- AppsFlyer
- CleverTap
- Criteo
- Drip
- Facebook Ads
- Facebook Page Insights
- Firebase Analytics
- Freshsales
- Google Ads
- Google Analytics 4
- Google Analytics 360
- Google Play Console
- Google Search Console
- HubSpot
- Instagram Business
- Klaviyo v2
- Lemlist
- LinkedIn Ads
- Mailchimp
- Mailshake
- Marketo
- Microsoft Ads
- Onfleet
- Outbrain
- Pardot
- Pinterest Ads
- Pipedrive
- Recharge
- Segment
- SendGrid Webhook
- SendGrid
- Salesforce Marketing Cloud
- Snapchat Ads
- SurveyMonkey
- Taboola
- TikTok Ads
- Twitter Ads
- Typeform
- YouTube Analytics
- Product Analytics
- Sales & Support Analytics
- Source FAQs
-
Destinations
- Familiarizing with the Destinations UI
- Cloud Storage-Based
- Databases
-
Data Warehouses
- Amazon Redshift
- Amazon Redshift Serverless
- Azure Synapse Analytics
- Databricks
- Google BigQuery
- Hevo Managed Google BigQuery
- Snowflake
- Troubleshooting Data Warehouse Destinations
-
Destination FAQs
- Can I change the primary key in my Destination table?
- Can I change the Destination table name after creating the Pipeline?
- How can I change or delete the Destination table prefix?
- Why does my Destination have deleted Source records?
- How do I filter deleted Events from the Destination?
- Does a data load regenerate deleted Hevo metadata columns?
- How do I filter out specific fields before loading data?
- Transform
- Alerts
- Account Management
- Activate
- Glossary
-
Releases- Release 2.43 (Nov 03-Dec 01, 2025)
- Release 2.42 (Oct 06-Nov 03, 2025)
-
2025 Releases
- Release 2.41 (Sep 08-Oct 06, 2025)
- Release 2.40 (Aug 11-Sep 08, 2025)
- Release 2.39 (Jul 07-Aug 11, 2025)
- Release 2.38 (Jun 09-Jul 07, 2025)
- Release 2.37 (May 12-Jun 09, 2025)
- Release 2.36 (Apr 14-May 12, 2025)
- Release 2.35 (Mar 17-Apr 14, 2025)
- Release 2.34 (Feb 17-Mar 17, 2025)
- Release 2.33 (Jan 20-Feb 17, 2025)
-
2024 Releases
- Release 2.32 (Dec 16 2024-Jan 20, 2025)
- Release 2.31 (Nov 18-Dec 16, 2024)
- Release 2.30 (Oct 21-Nov 18, 2024)
- Release 2.29 (Sep 30-Oct 22, 2024)
- Release 2.28 (Sep 02-30, 2024)
- Release 2.27 (Aug 05-Sep 02, 2024)
- Release 2.26 (Jul 08-Aug 05, 2024)
- Release 2.25 (Jun 10-Jul 08, 2024)
- Release 2.24 (May 06-Jun 10, 2024)
- Release 2.23 (Apr 08-May 06, 2024)
- Release 2.22 (Mar 11-Apr 08, 2024)
- Release 2.21 (Feb 12-Mar 11, 2024)
- Release 2.20 (Jan 15-Feb 12, 2024)
-
2023 Releases
- Release 2.19 (Dec 04, 2023-Jan 15, 2024)
- Release Version 2.18
- Release Version 2.17
- Release Version 2.16 (with breaking changes)
- Release Version 2.15 (with breaking changes)
- Release Version 2.14
- Release Version 2.13
- Release Version 2.12
- Release Version 2.11
- Release Version 2.10
- Release Version 2.09
- Release Version 2.08
- Release Version 2.07
- Release Version 2.06
-
2022 Releases
- Release Version 2.05
- Release Version 2.04
- Release Version 2.03
- Release Version 2.02
- Release Version 2.01
- Release Version 2.00
- Release Version 1.99
- Release Version 1.98
- Release Version 1.97
- Release Version 1.96
- Release Version 1.95
- Release Version 1.93 & 1.94
- Release Version 1.92
- Release Version 1.91
- Release Version 1.90
- Release Version 1.89
- Release Version 1.88
- Release Version 1.87
- Release Version 1.86
- Release Version 1.84 & 1.85
- Release Version 1.83
- Release Version 1.82
- Release Version 1.81
- Release Version 1.80 (Jan-24-2022)
- Release Version 1.79 (Jan-03-2022)
-
2021 Releases
- Release Version 1.78 (Dec-20-2021)
- Release Version 1.77 (Dec-06-2021)
- Release Version 1.76 (Nov-22-2021)
- Release Version 1.75 (Nov-09-2021)
- Release Version 1.74 (Oct-25-2021)
- Release Version 1.73 (Oct-04-2021)
- Release Version 1.72 (Sep-20-2021)
- Release Version 1.71 (Sep-09-2021)
- Release Version 1.70 (Aug-23-2021)
- Release Version 1.69 (Aug-09-2021)
- Release Version 1.68 (Jul-26-2021)
- Release Version 1.67 (Jul-12-2021)
- Release Version 1.66 (Jun-28-2021)
- Release Version 1.65 (Jun-14-2021)
- Release Version 1.64 (Jun-01-2021)
- Release Version 1.63 (May-19-2021)
- Release Version 1.62 (May-05-2021)
- Release Version 1.61 (Apr-20-2021)
- Release Version 1.60 (Apr-06-2021)
- Release Version 1.59 (Mar-23-2021)
- Release Version 1.58 (Mar-09-2021)
- Release Version 1.57 (Feb-22-2021)
- Release Version 1.56 (Feb-09-2021)
- Release Version 1.55 (Jan-25-2021)
- Release Version 1.54 (Jan-12-2021)
-
2020 Releases
- Release Version 1.53 (Dec-22-2020)
- Release Version 1.52 (Dec-03-2020)
- Release Version 1.51 (Nov-10-2020)
- Release Version 1.50 (Oct-19-2020)
- Release Version 1.49 (Sep-28-2020)
- Release Version 1.48 (Sep-01-2020)
- Release Version 1.47 (Aug-06-2020)
- Release Version 1.46 (Jul-21-2020)
- Release Version 1.45 (Jul-02-2020)
- Release Version 1.44 (Jun-11-2020)
- Release Version 1.43 (May-15-2020)
- Release Version 1.42 (Apr-30-2020)
- Release Version 1.41 (Apr-2020)
- Release Version 1.40 (Mar-2020)
- Release Version 1.39 (Feb-2020)
- Release Version 1.38 (Jan-2020)
- Early Access New
Edge Pipeline is now available for Public Review. You can explore and evaluate its features and share your feedback.
Salesforce is a cloud computing Software as a Service (SaaS) company that allows you to use cloud technology to connect more effectively with customers, partners, and potential customers.
Hevo uses Salesforce’s Bulk API to replicate data from your Salesforce applications to the Destination database or data warehouse, switching to Salesforce REST API for unsupported objects. To enable this, you need to authorize Hevo to access data from the relevant Salesforce environment.
Salesforce Environments
Salesforce allows businesses to create accounts in multiple environments, such as:
-
Production: This environment holds live customer data and is used to actively run your business. A production organization is identified by URLs starting with https://login.salesforce.com.
-
Sandbox: This is a copy of your production organization. You can create multiple sandbox environments for different purposes, such as one for development and another for testing. Working in the sandbox eliminates risk of compromising your production data and applications. A sandbox is identified by URLs starting with https://test.salesforce.com.
Prerequisites
-
An active Salesforce production or sandbox account from which data is to be ingested exists.
-
History tracking is enabled to track history objects.
Configuring Salesforce Bulk API V2 as a Source in your Pipeline
Perform the following steps to configure your Salesforce Bulk API V2 Source:
-
Click PIPELINES in the Navigation Bar.
-
Click + Create Pipeline in the Pipelines List View.
-
On the Select Source Type page, select Salesforce Bulk API V2.
-
On the Select Destination Type page, select the type of Destination you want to use.
-
On the Select Pipeline Type page, choose the type of Pipeline you want to create based on your requirements, and then click Continue.

-
If you select Edge, skip to step 6 below.
-
If you select Standard, read Salesforce Bulk API V2 to configure your Standard Pipeline.
This page appears only if all the following conditions are met:
-
The selected Destination type is supported in Edge.
-
Your Team was created before September 15, 2025, and has an existing Pipeline created with the same Destination type.
For Teams that do not meet the above criteria:
-
If the selected Destination type is supported in Edge, you can proceed to create an Edge Pipeline.
-
If the Destination type is not supported, you can proceed to create a Standard Pipeline. Read Salesforce Bulk API V2 to configure your Standard Pipeline.
-
-
In the Configure Source screen, do the following:

-
Source Name: Specify a unique name for your Source, not exceeding 255 characters. For example, Salesforce Source.
-
Configure your Salesforce app: Select the environment from which Hevo must ingest the data. This can be Production or Sandbox.
-
Click Authenticate Your SALESFORCE Account and perform the following steps to set up an account now:
-
Log in to your Salesforce account.
-
Click Allow to authorize Hevo to access the account.

You are redirected to the Salesforce screen.
-
-
In the Historical Sync Duration section, from the drop-down, select the duration for which you want to ingest the existing data from the Source. Default duration: 3 Months.
Note: If you select All Available Data, Hevo ingests all the data available in your Salesforce account since January 01, 1970.
-
-
Click Test & Continue to test the connection to your Salesforce Bulk API V2 Source. Once the test is successful, you can proceed to set up your Destination.
Data Replication
Hevo loads all the objects associated with your Salesforce account. By default, Hevo ingests all the columns available in an object. However, you can select the columns to load on the Object Configuration page.
-
Historical Data: The first run of the Pipeline ingests all available historical data for the selected objects and loads it to the Destination. Hevo utilizes Salesforce’s Bulk API for data replication and falls back to the REST API when the Bulk API is unsupported for an object.
-
Incremental Data: Once the historical load is complete, data is ingested according to the specified sync frequency. Hevo fetches only the data that has been modified since the last sync by checking for updates in the timestamp fields, in the following order: SystemModstamp, LastModifiedDate, CreatedDate, and LoginTime. These fields allow Hevo to identify the records that have been modified or created since the last sync. If the selected object does not contain any of these timestamp fields, Hevo fetches all records from the object during each incremental run.
If the number of requests made to the Salesforce Bulk API exceeds its rate limit, a rate limit exception occurs. To understand how Hevo handles these exceptions, read Handling Rate Limit Exceptions.
Note: Hevo creates a Destination table for an object after the first successful API call to fetch its data, even if that call returns no records. Once created, the table is updated with new data from subsequent API calls. However, if the initial API call fails due to issues such as missing permissions or schema incompatibility, the table is not created.
Naming Convention
Hevo uses a set of naming rules to ensure that schemas, tables, and columns are compatible and standardized in the Destination system. These rules are applied in the following order:
-
All accent marks, such as acute or grave accents, are removed from characters.
-
Any character that is not a letter (A-Z, a-z), a digit (0-9), or an underscore (_) is replaced with an underscore. Spaces are also replaced with underscores.
-
Strings containing a mix of letters and numbers are split at the point where letters change case or at the transition between letters and digits. Multiple words are joined using underscores. Consecutive uppercase letters are treated as part of the same word.
-
If there are multiple underscores in a row, they are reduced to a single underscore.
-
All uppercase letters are converted to lowercase.
-
If a name starts with a number, an underscore is prepended to avoid starting the name with a digit.
-
For table names, any underscore at the beginning of the name is removed if it is immediately followed by a letter.
Note: Schemas, tables, and columns are named according to these defined rules and then converted as needed based on the Destination’s specific naming conventions. For example, in Snowflake, a table name converted to lowercase will be changed to uppercase due to Snowflake’s default behavior.
The following table lists a few examples of how Hevo applies naming rules to your schema, table, and column names:
| Original Name | Converted Name | Explanation |
|---|---|---|
| Montréal report | montreal_report | Accent marks are removed. |
| first name | first_name | Space is converted to underscore. |
| total$amount | total_amount | Special character $ is replaced with an underscore. |
| data@location | data_location | Special character @ is replaced with an underscore. |
| userName | user_name | Mixed-case letters are split with an underscore at the transition from lowercase to uppercase. |
| user123 | user_123 | Alphanumeric string is split with an underscore at the transition from letters to numbers. |
| user__data | user_data | Multiple underscores are reduced to a single underscore. |
| PRODUCT | product | Uppercase letters are converted to lowercase. |
| 123id | _123id | Name starting with a number is prepended with an underscore. |
| _productTable | productTable | The leading underscore in table names is removed. |
Schema and Primary Keys
Hevo uses the following schema to upload the records in the Destination:
Data Model
Hevo supports ingesting data from more than 100 standard Salesforce objects, as well as custom objects that you may have created in your Salesforce account. Hevo also supports associated objects that relate to the standard objects.
The following table lists the most frequently used objects along with their descriptions:
| Object | Description |
|---|---|
| Account | Contains information about a specific company, organization, or entity that you do business with. |
| Contact | Contains information about a company or a person associated with an account that can become a potential customer. |
| Opportunity | Contains information about a potential revenue-generating event, such as a sale or deal. |
| Lead | Contains information about a prospect or potential customer that has shown interest in your products or services. |
| Case | Contains information about a customer inquiry, issue, or support request. |
| Task | Contains information about a business activity, such as a to-do item. |
| Event | Contains information about a scheduled event, such as a meeting, call, or appointment. |
| User | Contains information about a user in your organization. |
| Campaign | Contains information about campaigns and tracks their efficiency with cost, revenue, and converted leads analysis. |
| Product2 | Contains information about a product your company sells. |
| Custom Objects | Contains information about custom objects, entities that support custom objects, and their standard fields, named with the suffix __c. Custom objects allow businesses to extend Salesforce functionality to store unique business data. |
| StandardObjectNameShare | Contains information about the data model used to store record-sharing rules for a standard object. These rules determine which users or groups can access specific records. |
| StandardObjectNameHistory | Contains information about the data model that stores the history of changes made to records in a standard object, including field-level modifications over time. |
| StandardObjectNameOwnerSharingRule | Contains information about the data model that defines ownership-based sharing rules for a standard object. These rules specify how access is granted to users other than the record owner. |
| StandardObjectNameFeed | Contains information about the data model that tracks collaboration and activity updates for records in a standard object. |
Additional Information
Read the detailed Hevo documentation for the following related topics:
Source Considerations
-
Formula fields, also known as derived fields or calculated fields, in Salesforce generate their values dynamically based on other fields, functions, or expressions. Every time a Salesforce object containing formula fields is accessed, the value is recalculated in real time instead of being stored in the schema.
Hevo identifies these fields by replicating their formula definitions into system tables in your Destination, and then creating views that recalculate the formula logic after each incremental load. Read Handling Formula Fields for more information. -
When a record from a replicable object is deleted in Salesforce, the IsDeleted column for it is set to True. Salesforce moves the deleted records to the Salesforce Recycle Bin, and they are not displayed in the Salesforce dashboard. Now, when Hevo starts the data replication from your Source, using either the Bulk APIs or REST APIs, it also replicates data from the Salesforce Recycle Bin to your Destination. As a result, you might see more Events in your Destination than the Source.
-
If you disable a Pipeline for more than 15 days, Hevo cannot replicate the deleted data, if any, to your Destination. This is because Salesforce retains deleted data in its Recycle Bin for 15 days. Also, Salesforce purges the oldest records in the Recycle Bin every two hours if their count exceeds the limit for your organization. The record limit is 25 times your organization’s storage capacity. Therefore, to correctly capture the deleted data, you must run the Pipeline within two hours of deleting the data in Salesforce.
-
Hevo primarily uses Salesforce’s Bulk API for data retrieval but switches to the REST API when necessary, especially for unsupported objects.
-
Custom fields in Salesforce are mapped directly to corresponding fields in the Destination, following the appropriate conventions for field names and data types.
-
Salesforce allows only 5 active sessions per user per connected app. If you create more than 5 Pipelines using the same Salesforce user account, Salesforce revokes the refresh token of the oldest session. As a result, earlier Pipelines lose access and require manual reauthorization to resume.
Limitations
- It is not possible to avoid loading the deleted data. Hevo loads the new, updated, and deleted data from your Salesforce account.