No companies loaded
Configure your Google Apps Script in settings to get started
No contacts loaded
Load data from your Google Sheet to see contacts
Select a Contact to view Information
Due Tasks
No tasks due
Tasks will appear here when contacts have active sequence steps
Select a task to execute
Activity Log
No activity logged
Your communication history will appear here
Select a log entry to view details
🎬 Video Library
Record and save videos to use in your emails and sequences. You can store up to 5 videos.
No saved videos yet
Record videos to use in your emails and sequences
Sequences
No sequences created
Create sequences to automate your outreach workflow
Select a sequence to edit or create a new one
Report Filters
Saved Reports
Report Results
Select filters and click "Generate Report" to view insights
Reports help you analyze your outreach performance
Inbox
Call History
No call history
Your call logs will appear here
Select a call to view details
December 2025
👤 Profile
Loading...
Member since: --
Account Information
Appearance
Subscription
⚙️ Settings
🔗 Google Sheets Connection
📧 Email Integration
📅 Calendar & Booking
- Open Google Calendar
- Click "Create" → "Appointment schedule"
- Set the duration (15min, 30min, etc.) and your availability
- Copy the booking page link and paste it below
{{user.calendar_15min}}
{{user.calendar_30min}}
{{user.calendar_45min}}
{{user.calendar_60min}}
📞 Phone System
Phone Not Configured
Set up your phone system to make and receive calls directly from the CRM.
Pricing: $2/month per phone number + $0.02/minute for calls
👤 User Preferences
✍️ Email Signature
📊 Column Mapping
🏷️ Tag Options
🧩 Extension Setup Instructions
The Chrome extension requires a separate Google Apps Script to import contacts into your sheet. Follow these steps:
- Open your Google Sheet (the same one used for the CRM)
- Go to Extensions → Apps Script
- If you already have the CRM script, create a new script file by clicking + next to "Files"
- Name it ExtensionImport and paste this code:
function doPost(e) { try { var sheet = SpreadsheetRight getActiveSpreadsheet().getActiveSheet(); var data = JSON.parse(e.postData.contents); var mappings = data.columnMappings || {}; var contacts = Array.isArray(data.contacts) ? data.contacts : [data]; // Find the last row with data in column A (company column) var primaryColumn = mappings.company || 'A'; var colNum = columnToNumber(primaryColumn); var lastRowInColumn = getLastRowInColumn(sheet, colNum); contacts.forEach(function(contact, index) { var lastRow = lastRowInColumn + 1 + index; // Map each field to its configured column setCell(sheet, lastRow, mappings.company, contact.company); setCell(sheet, lastRow, mappings.businessType, contact.businessType); setCell(sheet, lastRow, mappings.title, contact.title); setCell(sheet, lastRow, mappings.firstName, contact.firstName); setCell(sheet, lastRow, mappings.lastName, contact.lastName); setCell(sheet, lastRow, mappings.website, contact.website); setCell(sheet, lastRow, mappings.email, contact.email); setCell(sheet, lastRow, mappings.phone, contact.phone); setCell(sheet, lastRow, mappings.phone2, contact.phone2); setCell(sheet, lastRow, mappings.phone3, contact.phone3); setCell(sheet, lastRow, mappings.street, contact.street); setCell(sheet, lastRow, mappings.city, contact.city); setCell(sheet, lastRow, mappings.state, contact.state); setCell(sheet, lastRow, mappings.zip, contact.zip); setCell(sheet, lastRow, mappings.notes, contact.notes); setCell(sheet, lastRow, mappings.status, contact.status); setCell(sheet, lastRow, mappings.statusReason, contact.statusReason); setCell(sheet, lastRow, mappings.territory, contact.territory); setCell(sheet, lastRow, mappings.sequence, contact.sequence); setCell(sheet, lastRow, mappings.currentStep, contact.currentStep); setCell(sheet, lastRow, mappings.dueDate, contact.dueDate); setCell(sheet, lastRow, mappings.amount, contact.amount); setCell(sheet, lastRow, mappings.textingAvailable, contact.textingAvailable); setCell(sheet, lastRow, mappings.tag, contact.tag); setCell(sheet, lastRow, mappings.leadSource, contact.leadSource); setCell(sheet, lastRow, mappings.leadOwner, contact.leadOwner); setCell(sheet, lastRow, mappings.createdDate, contact.createdDate); setCell(sheet, lastRow, mappings.quoteAmount, contact.quoteAmount); }); return ContentService .createTextOutput(JSON.stringify({ success: true, message: contacts.length + ' contact(s) added' })) .setMimeType(ContentService.MimeType.JSON); } catch (error) { return ContentService .createTextOutput(JSON.stringify({ success: false, error: error.toString() })) .setMimeType(ContentService.MimeType.JSON); } } function setCell(sheet, row, column, value) { if (column && value) { sheet.getRange(row, columnToNumber(column)).setValue(value); } } function columnToNumber(column) { var col = column.toUpperCase(); var result = 0; for (var i = 0; i < col.length; i++) { result = result * 26 + col.charCodeAt(i) - 64; } return result; } function getLastRowInColumn(sheet, colNum) { var data = sheet.getRange(1, colNum, sheet.getMaxRows(), 1).getValues(); for (var i = data.length - 1; i >= 0; i--) { if (data[i][0] !== '' && data[i][0] !== null) { return i + 1; } } return 0; } function doGet(e) { return ContentService .createTextOutput(JSON.stringify({ status: 'ready', message: 'CrawlSpace Sheets Integration Active' })) .setMimeType(ContentService.MimeType.JSON); } - Click Save (💾 icon)
- Click Deploy → New Deployment
- Choose type: Web app
- Set "Execute as: Me" and "Who has access: Anyone"
- Click Deploy
- Copy the Web App URL and paste it in the extension settings
- This script is different from the CRM script - it handles importing contacts from the extension
- Make sure your column mappings in the extension match the columns in your sheet
- The extension will automatically use the column settings you configure
📥 Marketing Integrations
Connect your lead generation forms to automatically import leads into your Google Sheet. CrawlSpace will pull them in when you sync.
Facebook & Instagram Lead Ads
Facebook has a built-in Google Sheets integration that automatically sends leads to your spreadsheet. Here's how to set it up:
Go to business.facebook.com and select your business account.
Click All Tools → Instant Forms (under Advertise).
Click CRM Setup in the left sidebar, then click New Integration.
Paste your Google Sheet URL (the same one you use for CrawlSpace) and authorize access.
Match Facebook form fields to your sheet columns. Use the same columns from your Column Mapping settings.
In the mapping, set your Lead Source column to a fixed value like Facebook or Instagram so you know where leads came from.
LinkedIn Lead Gen Forms
LinkedIn doesn't have a native Google Sheets integration, but you can connect them using Zapier (free tier available):
Go to zapier.com and sign up (free tier includes 100 tasks/month).
Click Create Zap and search for LinkedIn Lead Gen Forms as your trigger.
Authorize Zapier to access your LinkedIn Campaign Manager and select your Lead Gen Form.
Search for Google Sheets → Create Spreadsheet Row.
Connect your Google Sheet and map LinkedIn fields to your columns. Set Lead Source to LinkedIn.
Test the Zap, then publish it. New LinkedIn leads will automatically appear in your sheet.
Best Practices
- Use consistent column mapping – Make sure the columns in Facebook/Zapier match your CrawlSpace Column Mapping settings.
- Always set Lead Source – This helps you track which platform your leads come from.
- Set default Status to "New" – So new leads are easy to find and filter.
- Test before running ads – Submit a test lead to verify everything flows correctly.
- Sync regularly – Click the Sync button in CrawlSpace to pull in new leads from your sheet.