How to Send Salesforce Data to BigQuery: Top Methods and Tips

Salesforce provides a wealth of information regarding your business’s sales, marketing, and customer support activities.
However, you might find its native analytics somewhat limiting, especially when it comes to custom formulas or predictive capabilities. Therefore, if you want to extract deeper insights, pairing Salesforce with a more powerful analytics platform, such as BigQuery, can be a game-changing solution.
Salesforce to BigQuery integration enables businesses to measure campaign performance, analyze customer behavior, and even forecast sales, helping transform raw data into more informed decisions.
The key question now is: “How can I transfer Salesforce data to BigQuery efficiently and at scale?” In this guide, we’ll walk you through the primary integration methods and offer practical tips to help you choose the best approach for your needs. Let’s dive in.
What is Salesforce?
Salesforce is a leading cloud-based CRM platform for businesses of all sizes, designed to manage sales, marketing, and customer service information in a single place. Such an integral concept eliminates the need to juggle between tools, enhancing workflows and improving team productivity.
The key Salesforce features include:
- Contact management
- Built-in marketing automation
- Collaborative setup and data sharing
- Enterprise-grade security
Generally, Salesforce is a flexible, secure, and user-friendly CRM platform that offers a broad range of customer management tools.
What is Google BigQuery?
Google BigQuery is a robust data warehouse that allows you to store, visualize, analyze, and process your data on a cloud server. Once you load your data from Salesforce into BigQuery, you’re able to create custom dashboards, execute complex queries, and merge it with data from other sources.
Key features of BigQuery include:
- Scalable data storage and processing
- Tight security controls
- Simple data sharing
- ML-powered advanced analytics
Thus, if you’re looking for a quick, safe, and low-maintenance method to store and analyze large-scale Salesforce data, then BigQuery is the right choice. It’s built to handle heavy workloads, saving you from the complexity of infrastructure management.
Why сonnect Salesforce to Google BigQuery?
Connecting Salesforce with BigQuery makes a lot of sense if you are looking for advanced analytics and quicker access to regularly updated CRM data. Salesforce is a repository that stores all your customer information, including leads, deals, tickets, campaign data, and more, while BigQuery enables you to process that data at scale and run complex queries efficiently. Together, they help you unlock the full value of your CRM.
Once you connect Salesforce and BigQuery, you can make the most value out of your CRM data.
Additionally, BigQuery enables you to integrate Salesforce data with other sources, such as web analytics, billing, support logs, and campaign results, for a comprehensive view of your business performance. Then, you can also feed this unified dataset into BI tools like Looker Studio for rich visual dashboards, or apply predictive models like lead scoring and sales forecasting using BigQuery ML or external tools.
The best part? With the right ETL setup using Windsor.ai, Salesforce to BigQuery integration is easier than you might think—no manual exports, fewer errors, and automated, real-time insights at scale.
Types of Salesforce data you can move to BigQuery
When syncing Salesforce with BigQuery, you can transfer a wide range of data, as long as it’s supported by the Salesforce Bulk API.
Here are the main data types you can send from Salesforce to BigQuery:
- Standard objects like Leads, Contacts, Accounts, Opportunities, and even Cases. These contain essential CRM information, including customer data, sales pipeline information, and support records.
- Custom objects, if your organization has enhanced Salesforce features.
- Marketing data, including Campaigns, Members, and Email tracking, to measure engagement and return on investment (ROI).
- Task and event data aid in capturing sales or customer interactions chronologically.
- User and role data to define actions taken by internal users, as well as security settings.
Limitations of native Salesforce data transfer via BigQuery Data Transfer Service
While using BigQuery Data Transfer Service to send data from Salesforce, keep in mind the following limitations:
1) Only objects that the Bulk API supports can be transferred. Unsupported objects will result in the error message: “Entity is not supported by the Bulk API.”
2) Salesforce exports records in JSON or CSV format. You need to clean up or transform specific fields before uploading them to BigQuery.
3) Transfers have a minimum frequency of 15 minutes, with 24 hours being the default. Automated transfers are set to run once every 24 hours.
4) The service connects and pulls data using v1 of Salesforce Bulk API.
5) Data transfers between a VM and network attachment residing in different regions may result in performance or cost penalties due to inter-region data movement.
Always ensure that the data objects are supported, the timing is optimal, and the network setup minimizes cross-region transfers to maximize efficiency and reduce costs.
Things to consider before integrating Salesforce data into BigQuery
Integrating Salesforce data into BigQuery requires attention to technical details to avoid data quality issues and performance bottlenecks.
Here are some of the key considerations:
1. Data type mismatches
BigQuery and Salesforce use different data types, which can lead to compatibility issues during integration.
For example, Salesforce’s DateTime field doesn’t directly map to BigQuery’s TIMESTAMP, and Boolean values often require conversion.
Another common challenge is the incomplete records and customized fields. Apart from that, you might also face a lack of naming conventions and spelling discipline.
To resolve this problem, you should consider data cleaning. Plus, standardize fields and validate values to maintain uniformity in BigQuery.
The simplest way to achieve data consistency is by implementing a solid data type mapping strategy during the ETL process. Specialized transformation tools like Windsor.ai can help by automatically transforming Salesforce data to match BigQuery’s schema before loading.
2. API rate limits
Salesforce enforces strict API call limits that can significantly impact data extraction. For example, the default limit for most Salesforce editions is 100,000 API calls per 24-hour period, although this can vary depending on the license type and user count.
To mitigate these constraints and avoid throttling, consider applying the following best practices:
- Use bulk and asynchronous APIs: Salesforce Bulk API (v2.0) allows for large-scale, asynchronous data extraction with fewer API calls.
- Leverage incremental extraction: Avoid full data pulls by extracting only new or updated records using fields like LastModifiedDate or SystemModstamp. This drastically reduces data volume and API consumption.
- Schedule jobs during off-peak hours: Run extraction jobs during Salesforce’s low-traffic windows to reduce contention with other API usage.
- Monitor API usage: Set up alerts if you’re approaching 75% or more of your daily quota to prevent interruptions.
Using robust ETL tools like Windsor.ai helps optimize API usage by batching queries, applying incremental loads, and automatically handling retries when limits are reached.
3. Complex data relationships
Salesforce is built on a highly relational data model, where objects like Leads, Accounts, and Opportunities are interlinked through foreign keys and lookup fields.
These relationships are essential for business context but can pose challenges when loading data into BigQuery, which is set for flat, denormalized schemas.
To deal with this mismatch, you can follow these best practices:
- Flatten nested structures
- Use IDs to merge associated objects before you load them into BigQuery to keep context
- Combine related objects in your ETL tool (e.g., Windsor.ai or dbt) before loading to avoid costly JOIN operations inside BigQuery
4. Security and compliance
Take the following steps to achieve the top level of security and compliance when transferring data from Salesforce to BigQuery:
- Implement encryption in transit and at rest
- Set access controls in BigQuery
- Configure IAM roles to limit data access and protect sensitive information
4 proven methods to connect Salesforce to Google BigQuery
Moving data from Salesforce to BigQuery can be implemented via several options, each addressing specific needs and requiring different levels of expertise.
Method 1. Automated Salesforce to BigQuery integration with ETL/ELT tools
Method 2. Via Google Cloud’s Native BigQuery Data Transfer Service
Method 3. Manual CSV export & BigQuery upload
Method 4. Custom script (API + BigQuery Client)
Method 1. Automated Salesforce to BigQuery integration with ETL/ELT tools
- Prerequisites: Salesforce Account, Google BigQuery project, Windsor.ai (or any other ETL/ELT platform)
- Tools used: ETL/ELT platform (Windsor.ai), Google BigQuery
- Type of solution: Fully automated, no-code ETL/ELT pipeline
- Mechanism: Windsor.ai automatically integrates your Salesforce data into BigQuery within a few minutes. Schema mapping and data refreshing are performed automatically with real-time syncing, eliminating the need for code and manual updates
- Best suited for: Both technical and non-technical teams seeking a hands-off setup with maximum scalability, customization, and automated syncing
- Limitations: Requires a subscription
With Windsor.ai, you can connect Salesforce to BigQuery with just a few clicks. The connection is fully managed. It means that everything, from authorization and data syncing to error monitoring and refresh scheduling, is handled automatically under the hood after the initial setup.
Windsor.ai also handles schema mapping between Salesforce and BigQuery, removing the need to write or manage any code and perform manual operations. This approach ensures that your Salesforce data is 100% accurate and always up-to-date.
Additionally, Windsor.ai enables you to integrate Salesforce with data from over 325 other sources, including advertising platforms, SEO tools, e-commerce sites, and business applications, all within a unified BigQuery environment.
Here’s how Windsor.ai handles the integration between Salesforce and BigQuery:
✅ Instantly accesses Salesforce’s APIs, pulling info such as contacts, leads, tasks, and hundreds of other Salesforce metrics and dimensions, using OAuth for secure access.
✅ Automatically converts Salesforce data into BigQuery-friendly formats, such as JSON and CSV.
✅ Supports nested structures and custom fields.
✅ Automatically refreshes data in BigQuery tables according to the set schedule.
Method 2. Via Google Cloud’s Native BigQuery Data Transfer Service
- Prerequisites: Salesforce developer account with API access; Google Cloud project with BigQuery enabled; service account with necessary permissions
- Tools used: Salesforce connected app, BigQuery Data Transfer Service, GCP Console
- Type of solution: Manual, low-code configuration using native GCP tools
- Mechanism: Set up a Salesforce Connected App using OAuth 2.0 (specifically the client credentials flow) and use BigQuery Data Transfer Service to automate data ingestion for selected Salesforce objects
- Best suited for: Teams needing more control over authentication and transfer settings, but without the need for custom scripting
- Limitations: This method requires multiple manual setup steps, supports only selected Salesforce objects, and is less flexible than scripted or fully managed ETL tools.
Native method execution steps:
Step 1: Create a Salesforce Connected App
- Log in to Salesforce → Setup → App Manager → New Connected App
- Add App Name and Contact Email
- Under API, enable OAuth settings → Set Callback URL (can be any valid URL like https://example.com/callback) → Select OAuth scopes
- Uncheck PKCE
- Enable Client Credentials Flow
- Click Save
- Go to Manage Connected Apps → Edit your app
- In Client Credentials Flow, assign a Run As User
- Save your changes
Step 2: Retrieve Salesforce Credentials
1. Get My Domain:
Salesforce Setup → My Domain → Get prefix from URL (e.g., example in example.my.salesforce.com)
2. Get Client ID and Secret:
Setup → App Manager → View your app → Manage Consumer Details → Copy Consumer Key and Consumer Secret
Step 3: Configure BigQuery Data Transfer
1. Enable APIs:
Google Cloud Console → APIs & Services → Enable BigQuery API and BigQuery Data Transfer API
2. Create a Dataset:
BigQuery Console → Your project → Create Dataset
3. Create a Service Account:
IAM & Admin → Service Accounts → Create → Assign BigQuery Admin and BigQuery Data Transfer Service Agent roles
4. Create a Transfer:
Go to BigQuery Console → Data Transfers → Create Transfer
- Select Salesforce
- Enter My Domain, Client ID, Client Secret
- Browse and select objects (e.g., Accounts, Leads)
- Set Destination Dataset
- Name your Transfer Config
- Schedule sync (daily/hourly/on-demand)
- Select your Service Account
- Click Save
Step 4: Verify data in BigQuery
Open BigQuery Console → Navigate to your dataset → Run a query like:
SELECT * FROM `your_project.your_table.events_*`
Done! Your Salesforce data is now available in BigQuery for advanced transformations and analysis.
Method 3. Manual CSV export & BigQuery upload
- Prerequisites: Salesforce account; access to Google Cloud Console or BigQuery API
- Tools used: Salesforce CSV export, Google Cloud Console, BigQuery Web UI or CLI
- Type of solution: Manual export-import, low-code
- Mechanism: Export Salesforce reports or data in CSV format and upload them into BigQuery through the UI or command-line tools. This process should be repeated for data updates
- Best suited for: One-time data transfers, small datasets, low-tech environments
- Limitations: no scalability, no automation, high risk of data inconsistency, and manual errors
If you prefer not to use a native service or third-party tools, you can manually export data from Salesforce and import it into BigQuery using CSV files. This is the most budget-friendly option, but also the most manual and time-consuming, involving the following steps:
1. Export data from Salesforce
Go to Salesforce reports → run the desired report → click “Export” → choose CSV format.
2. Create a BigQuery dataset and table
Use Google Cloud Console or the bq CLI:
bq mk --dataset your_project_id:your_dataset bq mk --table your_dataset.salesforce_data name:STRING,email:STRING,created_at:TIMESTAMP
3. Upload the CSV to BigQuery
You can upload a file directly from your local machine:
bq load --source_format=CSV \ --skip_leading_rows=1 \ your_dataset.salesforce_data \ ./salesforce_data.csv \ ./schema.json
Alternatively, upload the file to Cloud Storage first and load it from there.
This method works best for low-budget or short-term needs, but becomes less efficient as the data grows.
Method 4. Custom script (API + BigQuery Client)
- Prerequisites: Salesforce developer account with API access, Google Cloud project with BigQuery enabled, service account with necessary permissions, local environment with Python or Node.js
- Tools used: Salesforce REST or Bulk API, BigQuery client library for Python or Node.js, installed Google Cloud SDK (required for using bq CLI commands); Google BigQuery project, scheduling tools like cron or Cloud Scheduler (optionally)
- Type of solution: Manual, code-based integration using custom scripts and official APIs
- Mechanism: Authenticate with Salesforce API to extract data, format and clean the data locally, and upload it to BigQuery using the client library
- Best suited for: Developers who require complete control over data extraction, transformation, and loading, including support for custom Salesforce objects and advanced logic
- Limitations: Requires extensive programming knowledge and maintenance, no built-in scheduling or monitoring unless explicitly implemented, initial setup and testing may take a lot of time
Pros:
- Complete customization: Modify the data in any way you wish.
- Extensible: Insert additional steps, such as deduplication, dataset logging, or data validation.
- Ready for integration: Merge with other APIs or services.
Cons:
- You must handle errors, retries, and rate limits manually.
- Development skills, testing, and documentation are required.
- Schema management falls under your responsibility.
Execution steps:
Step 1: Authenticate and connect to Salesforce
Sample Python script:
from simple_salesforce import Salesforce sf = Salesforce( username='your_username', password='your_password', security_token='your_token' ) # Query example data = sf.query("SELECT Id, Name, Industry FROM Account")
Note: For large datasets, you may need to handle pagination using sf.query_more().
Step 2: Format and clean the Salesforce data
Before sending data into BigQuery:
- Transform into a flat format (flatten nested JSON)
- Standard ISO format for timestamps
- Handle null values or invalid characters
- Optional: save as a temporary .json or .csv file (can be streamed directly)
Sample Python script:
import pandas as pd records = data['records'] df = pd.json_normalize(records) # Drop Salesforce's metadata column if 'attributes' in df.columns: df.drop(columns='attributes', inplace=True) # Optional: Save to JSON for BigQuery df.to_json('accounts.json', orient='records', lines=True) You may also want to ensure timestamp formatting: # Example of standardizing timestamp columns df['CreatedDate'] = pd.to_datetime(df['CreatedDate'], errors='coerce')
Step 3: Load data into BigQuery
Sample Python script:
from google.cloud import bigquery client = bigquery.Client() table_id = 'your_project.your_dataset.your_table' job_config = bigquery.LoadJobConfig(source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON, autodetect=True) with open("accounts.json", "rb") as source_file: load_job = client.load_table_from_file(source_file, table_id, job_config=job_config) load_job.result() # Waits for job to complete
Step 4. Automate the workflow
Run this script regularly with any scheduler:
- Local dev: cron, Task Scheduler
- Cloud: Google Cloud Functions + Cloud Scheduler, AWS Lambda + EventBridge
- CI/CD pipelines: GitHub Actions, GitLab CI, etc.
Key advantages of using the Windsor.ai ETL/ELT Tool
Windsor.ai offers a no-code, intuitive ELT solution that enables seamless integration of Salesforce data with Google BigQuery in just minutes.
One of its core benefits is automated, real-time data synchronization. With Windsor.ai, Salesforce data streams directly to BigQuery, eliminating the need for manual exports and ensuring your analytics always reflect the most up-to-date information.
The platform is also highly scalable. By leveraging BigQuery’s robust data infrastructure, Windsor.ai handles growing datasets with ease, maintaining performance as data volumes increase without adding complexity.
Windsor.ai also facilitates easy integration with Google’s analytics ecosystem, including Looker Studio. You can quickly sync your BigQuery table to Looker to build auto-refreshing dashboards tailored to your business, monitor KPIs, and uncover actionable insights—all without extra effort.
Finally, Windsor.ai’s user-friendly interface makes it accessible to marketers, analysts, and business users, not just data engineers. This combination of simplicity and powerful features makes it an ideal choice for organizations seeking a fast, scalable, and affordable Salesforce-to-BigQuery integration.
How to connect Salesforce data to BigQuery using Windsor.ai: Steps
If you’re wondering whether it’s really possible to integrate Salesforce data into BigQuery with Windsor.ai in under 5 minutes, this guide will show you exactly how to do it, step by step.
Windsor.ai’s BigQuery Integration Documentation: https://windsor.ai/documentation/how-to-integrate-data-into-google-bigquery/.
1. Sign up for Windsor.ai and start your 30-day free trial.
2. In the data sources list, select Salesforce and connect your account(s):
3. The connection is completed. View the list of your available Salesforce account(s) and select the necessary one(s) from which you want to pull data:
4. Click on the “Next” button to proceed with moving Salesforce data to BigQuery.
5. Next, configure your dataset by selecting the desired date range and specific fields you want to stream into BigQuery. Click on Get Data to preview your extracted data in Windsor.
6. Scroll down to the Data Destinations section and choose BigQuery from these options:
7. Click on the Add Destination Task and authorize your BigQuery account. In the destination task, add the following details from your BigQuery project:
- Task name: Enter any name you wish.
- Authentication type: You can authorize via a Google Account (OAuth 2.0) or a Service Account file.
- Project ID: This can be found in your Google Cloud Console.
- Dataset ID: This can be found in your BigQuery project.
- Table name: Windsor.ai will create this table for you if it doesn’t exist.
- Backfill: You can backfill historical data when setting up the task (available only on the paid plans).
- Schedule: Define how often data should be updated in BigQuery (e.g., hourly, daily; available on Standard plans and above).
Keep in mind that if you add new fields or edit the query after the table was initially created, you must manually edit your schema and add or edit those fields in your BigQuery table. Alternatively, you can create a new destination task, and Windsor.ai will auto-create a new table with full schema.
While Windsor.ai auto-creates the table schema on first setup, it does not automatically update the schema when new fields are added or edited later.
8. Select advanced options (optional).
Windsor.ai supports clustering and partitioning for BigQuery tables to help you improve query performance and reduce costs by optimizing how data is stored and retrieved.
- Partitioning: Segments data only by date ranges (either by date column or by ingestion time, e.g., a separate partition for each month of data). Learn more about partitioned tables.
- Clustering: Segments data by column values (e.g., by source, account, campaign). Learn more about clustered tables.
You can combine table clustering with table partitioning to achieve finely-grained sorting for further query optimization.
9. When completed, click “Test connection.” If the connection is set properly, you’ll see a success message at the bottom; otherwise, an error message will appear.
When successful, click “Save” to run the added destination task to BigQuery.
- See the task running in the selected data destination section. The green ‘upload‘ button with the status ‘ok‘ indicates that the task is active and running successfully.
10. Now, when you open your specified BigQuery project, you should see your Salesforce data uploaded there:
That’s it: a quick and completely no-code Salesforce to BigQuery integration method via Windsor.ai.
Summary: Windsor.ai vs other integration methods
Feature | Native BigQuery Transfer Service | Manual Export/Load | Windsor.ai ETL Connector |
Setup time | Medium | Long | Very Short |
Automation | Limited | None | Full |
Auto data refresh | No | No | Yes |
Custom transformations | Limited | Manual | Yes |
Error handling | Limited | None | Built-in |
Cost | Free | Free | Paid (starting at just $19/month) |
Ease of use | Medium | Low | High |
Conclusion
To handle the Salesforce data transfer to BigQuery, select a method that best aligns with your proficiency level and the project’s requirements.
For hands-off automation, Windsor.ai is an ETL tool of choice. For more “out-of-the-box” options, Google’s BigQuery Data Transfer Service offers native integration but comes with drawbacks regarding the number of objects it can support and the frequency of synchronization.
For low-volume or one-time transfers, a manual CSV export is applicable. For those who need Salesforce APIs and BigQuery SDKs flexibility, building a custom integration is the best bet.
Always plan for the types of data to be used, API caps, and data structure, as well as how it all gets synced. When done correctly, syncing data from Salesforce CRM with BigQuery unlocks advanced analytics and leverages its scalable infrastructure.
FAQs
How do I integrate Salesforce with BigQuery?
You can sync Salesforce data into BigQuery using ETL tools, APIs, custom scripts, or the Google BigQuery Data Transfer Service.
Why do I need to analyze Salesforce data in BigQuery?
This is helpful for advanced analytics, integrating CRM data with other data sources, or simply exploring valuable insights and improving decision-making.
What is the easiest way to connect Salesforce to BigQuery?
The simplest and fastest way to sync Salesforce with BigQuery is by using Windsor.ai’s robust no-code ETL/ELT connector.
Why should I choose Windsor.ai to connect Salesforce to BigQuery?
Windsor features a user-friendly no-code interface, robust data transformation options, and support for incremental updates, eliminating the need for manual work. And budget-wise, compared to other popular ETL/ELT solutions, Windsor.ai’s pricing plans for data integration into BigQuery are significantly more affordable, starting at just $19/month.