

How to Export Pipeline to Sheets with Pipedream
Query Salesforce for open opportunities every morning and automatically write them to a Google Sheet for team visibility.
Steps and UI details are based on platform versions at time of writing β check each platform for the latest interface.
Best for
Sales teams who need daily pipeline reports in Google Sheets without manual exports from Salesforce.
Not ideal for
Teams needing real-time updates or complex conditional formatting should use Salesforce reports directly.
Sync type
scheduledUse case type
reportingReal-World Example
A 12-person B2B sales team uses this to create a daily pipeline snapshot in Google Sheets that gets shared in their morning standup. Before automation, the sales ops person spent 15 minutes each morning manually exporting and formatting opportunity data. Now the sheet updates automatically at 7 AM with current deal values, stages, and close dates.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently β Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into Pipedream
Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. All modules, filters, and field mappings are already configured β you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Opportunity Name | Name | |
| Stage | StageName | |
| Amount | Amount | |
| Close Date | CloseDate | |
| Account Name | Account.Name | |
| Owner Name | Owner.Name | |
4 optional fieldsβΈ show
| Probability | Probability |
| Next Step | NextStep |
| Lead Source | LeadSource |
| Created Date | CreatedDate |
Step-by-Step Setup
Workflows > New > New Workflow
Create new workflow
Go to pipedream.com and click the purple 'New' button in the top right. Select 'New Workflow' from the dropdown menu. You'll see a blank workflow canvas with a 'Select a trigger' prompt in the center. Click on it to open the trigger selection panel.
- 1Click 'New' in the top navigation bar
- 2Select 'New Workflow' from the dropdown
- 3Click 'Select a trigger' in the workflow canvas
Trigger > Schedule > Custom Interval
Set up schedule trigger
In the trigger panel, search for 'Schedule' and select the 'Schedule' app. Choose 'Custom Interval' as your trigger type. Set the interval to run daily at your preferred time (like 7:00 AM). This creates a cron-based trigger that will fire every morning to fetch fresh pipeline data.
- 1Type 'Schedule' in the search box
- 2Click on the 'Schedule' app
- 3Select 'Custom Interval' trigger
- 4Set schedule to '0 7 * * *' for 7 AM daily
Add Step > Salesforce > Execute SOQL Query
Add Salesforce step
Click the '+' button below your trigger to add a new step. Search for 'Salesforce' and select it from the app list. Choose 'Execute SOQL Query' as the action since you need to query for open opportunities. This action lets you write custom SOQL to get exactly the fields you need.
- 1Click the '+' button below the trigger
- 2Search for 'Salesforce' in the app list
- 3Select 'Salesforce' app
- 4Choose 'Execute SOQL Query' action
Salesforce Step > Connect Account
Connect Salesforce account
In the Salesforce step configuration, click 'Connect Account' to authenticate with your Salesforce org. You'll be redirected to Salesforce login. Enter your credentials and authorize Pipedream to access your data. The connection needs read permissions for Opportunity, Account, and User objects to pull complete pipeline data.
- 1Click 'Connect Account' in the step config
- 2Log in to your Salesforce org
- 3Click 'Allow' to authorize Pipedream
- 4Return to Pipedream workflow
Salesforce Step > SOQL Query
Write SOQL query
In the SOQL Query field, enter a query to fetch open opportunities with the fields you need in your sheet. Include Opportunity name, stage, amount, close date, account name, and owner. The query should filter for open opportunities using 'WHERE IsClosed = false' to exclude won/lost deals.
- 1Click in the SOQL Query text area
- 2Enter the SOQL query for open opportunities
- 3Include relevant fields like Name, StageName, Amount
- 4Add WHERE clause to filter for open deals
Salesforce Step > Test
Test Salesforce query
Click 'Test' at the bottom of the Salesforce step to run your SOQL query and see the returned data. You'll see a JSON response with your opportunity records. Review the field names and data structure since you'll need these exact field names when mapping to Google Sheets. Make note of any null values or formatting issues.
- 1Click the 'Test' button at bottom of step
- 2Wait for the query to execute
- 3Review the returned opportunity data
- 4Note the field names in the JSON response
Add Step > Google Sheets > Add Multiple Rows
Add Google Sheets step
Click '+' below the Salesforce step to add Google Sheets. Search for 'Google Sheets' and select it. Choose 'Add Multiple Rows' as the action since you're writing multiple opportunity records. This action handles batch inserts efficiently rather than creating individual rows one by one.
- 1Click '+' below the Salesforce step
- 2Search for 'Google Sheets'
- 3Select 'Google Sheets' app
- 4Choose 'Add Multiple Rows' action
Google Sheets Step > Connect Account
Connect Google Sheets
Click 'Connect Account' in the Google Sheets step to authenticate with your Google account. You'll go through Google's OAuth flow to grant Pipedream access to your Google Sheets. Make sure you're logged into the Google account that owns or has edit access to your target spreadsheet.
- 1Click 'Connect Account' in the step
- 2Sign in to your Google account
- 3Grant Pipedream access to Google Sheets
- 4Return to the workflow
Google Sheets Step > Spreadsheet > Worksheet
Select spreadsheet and worksheet
In the Spreadsheet field, choose your target Google Sheet from the dropdown list. If you don't see it, make sure it's accessible to your connected Google account. Then select the specific worksheet tab where you want the opportunity data written. The action will append new rows to this sheet each time it runs.
- 1Click the Spreadsheet dropdown
- 2Select your target Google Sheet
- 3Choose the worksheet tab from the dropdown
- 4Verify the correct sheet is selected
Google Sheets Step > Rows > Add Row Mapping
Map opportunity fields
In the Rows section, you'll map Salesforce opportunity fields to your Google Sheet columns. Click 'Add Row Mapping' and use the reference picker to select fields from your Salesforce query results. Map key fields like opportunity name, stage, amount, close date, and account name to corresponding sheet columns.
- 1Click 'Add Row Mapping' button
- 2Use the reference picker to select Salesforce fields
- 3Map Name, StageName, Amount, CloseDate
- 4Add mappings for Account.Name and Owner.Name
Workflow > Test
Test complete workflow
Click 'Test' at the top of the workflow to run the entire pipeline end-to-end. This will execute your SOQL query, fetch the opportunity data, and write it to your Google Sheet. Check your Google Sheet to verify the data appears correctly formatted. Look for any missing values or formatting issues that need adjustment.
- 1Click the 'Test' button at workflow level
- 2Wait for all steps to complete execution
- 3Check your Google Sheet for new data
- 4Verify field mappings worked correctly
This code step goes between Salesforce and Google Sheets to clean up the data format and add calculated fields. Paste it as a Node.js code step after your SOQL query.
JavaScript β Code Stepexport default defineComponent({βΈ Show code
export default defineComponent({
async run({ steps, $ }) {
const opportunities = steps.salesforce.$return_value.records;... expand to see full code
export default defineComponent({
async run({ steps, $ }) {
const opportunities = steps.salesforce.$return_value.records;
// Clean and format the opportunity data
const formattedOpps = opportunities.map(opp => {
// Format currency to 2 decimal places
const amount = opp.Amount ? Math.round(opp.Amount * 100) / 100 : 0;
// Convert Salesforce date to readable format
const closeDate = opp.CloseDate ?
new Date(opp.CloseDate).toLocaleDateString('en-US') : '';
// Calculate days to close
const daysToClose = opp.CloseDate ?
Math.ceil((new Date(opp.CloseDate) - new Date()) / (1000 * 60 * 60 * 24)) : null;
// Add stage emoji for visual scanning
const stageEmoji = {
'Prospecting': 'π',
'Qualification': 'β',
'Needs Analysis': 'π',
'Value Proposition': 'π‘',
'Proposal/Price Quote': 'π',
'Negotiation/Review': 'π€',
'Closed Won': 'β
',
'Closed Lost': 'β'
};
return {
name: opp.Name || '',
stage: `${stageEmoji[opp.StageName] || ''} ${opp.StageName || ''}`,
amount: `$${amount.toLocaleString()}`,
closeDate: closeDate,
daysToClose: daysToClose,
accountName: opp.Account?.Name || '',
ownerName: opp.Owner?.Name || '',
probability: opp.Probability ? `${opp.Probability}%` : '',
nextStep: opp.NextStep || 'Not specified'
};
});
// Sort by close date (earliest first)
formattedOpps.sort((a, b) => new Date(a.closeDate) - new Date(b.closeDate));
return formattedOpps;
}
});Scaling Beyond 500+ opportunities+ Records
If your volume exceeds 500+ opportunities records, apply these adjustments.
Add SOQL pagination
Use LIMIT 1000 OFFSET 0 in your query and create multiple workflow runs to handle large datasets. Store the offset in Pipedream's built-in data store to track progress across runs.
Filter by date ranges
Add WHERE CreatedDate >= LAST_N_DAYS:180 or WHERE LastModifiedDate >= YESTERDAY to reduce query size. Most teams don't need ancient opportunities in daily reports anyway.
Use selective field querying
Only query fields you actually need in your Google Sheet. Avoid querying Description, Account.Description, or other large text fields that slow down data transfer and increase processing time.
Implement batch processing
Split large opportunity lists into chunks of 500 using JavaScript array.slice() in a code step. Process each chunk separately to avoid memory issues and stay within execution limits.
Monitor Salesforce API limits
Large SOQL queries consume significant API calls. Check your daily API usage in Salesforce Setup > System Overview. Consider reducing query frequency to every few hours instead of hourly for high-volume orgs.
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use Pipedream for this if you need custom data formatting or complex field transformations that basic connectors can't handle. The Node.js code steps let you add calculated fields, format currencies properly, and clean up messy Salesforce data before it hits your sheet. Skip it if you just want basic field mapping β Zapier's Salesforce to Google Sheets zap sets up in 3 minutes versus 15 minutes here.
Running this daily with 200 opportunities costs about 20 credits per execution on Pipedream, so roughly $6/month on their Developer plan. Make handles the same workflow for $9/month minimum, and Zapier burns through 400 tasks monthly ($20/month) since each opportunity is a separate task. Pipedream wins on cost here, especially as your pipeline grows.
Make's Salesforce connector has better built-in SOQL helpers and field browsing β you can click through available fields instead of writing raw SOQL. Zapier offers more pre-built formatting options for currencies and dates without custom code. n8n gives you similar coding flexibility to Pipedream but with a visual node editor that some teams prefer. Power Automate integrates better if you're already in the Microsoft ecosystem. But Pipedream's instant webhook processing and generous free tier make it the best choice for most sales teams doing pipeline exports.
You'll hit Salesforce API governor limits if you query huge opportunity datasets frequently. The 50,000 record SOQL limit seems big until you have years of historical data. Date formatting from Salesforce is consistently annoying β their ISO strings don't play nice with Google Sheets date functions. And if your team actively edits the Google Sheet during the morning sync, you might see weird formatting glitches where formulas get overwritten.
Ideas for what to build next
- βAdd conditional formatting β Set up Google Sheets rules to highlight deals close to their close date or in specific stages. Use color coding to make your pipeline report more visual and actionable.
- βCreate summary calculations β Add formulas at the bottom of your sheet to calculate total pipeline value, average deal size, and deals by stage. This turns your export into a proper dashboard.
- βSet up Slack notifications β Add a Slack step to send a daily message with pipeline summary stats like total value and number of deals closing this month. Perfect for morning standups.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup