A powerful Electron desktop application for enriching CSV data with email addresses from Apollo and ZeroBounce APIs, and sending personalized bulk emails.
- CSV File Processing: Upload and visualize CSV files with contact information
- Email Enrichment:
- Apollo: Fetch emails using Apollo API based on name, organization, and LinkedIn profiles
- ZeroBounce: Validate and enrich email data
- Bulk Email Campaigns: Send personalized emails to enriched contact lists via Microsoft Graph
- Variable Templates: Use CSV column data as variables in email templates
- Data Export: Download enriched CSV files with new email columns
- Modern UI: Clean, responsive interface with dark/light mode support
- Download the latest installer (
Row2ReachSetup.exe) from the Releases page. - Double-click the installer to run it.
- The application will install and launch automatically. A shortcut will be created on your desktop.
- Download the latest release zip (
Row_2_Reach-darwin-arm64.zip) from the Releases page. - Unzip the file to extract
Row 2 Reach.app. - Drag and drop
Row 2 Reach.appinto your Applications folder. - Double-click to launch.
On your first launch, the application will ask for your API keys. You can enter them manually or drag and drop a config.json file.
You will need:
- Apollo API Key: Available from your Apollo.io account settings.
- ZeroBounce API Key: Available from your ZeroBounce dashboard.
Once saved, these keys are stored securely on your local machine. You can edit them later via the application menu (Row 2 Reach > Edit API Keys...).
Your CSV file should contain the following columns for optimal results:
- Name: Full name of the contact
- Organization: Company name
- LinkedIn: LinkedIn profile URL
- Any additional columns you want to use as email template variables
Example CSV:
Name,Organization,LinkedIn,Title
John Doe,Acme Corp,https://linkedin.com/in/johndoe,Software Engineer
Jane Smith,Tech Inc,https://linkedin.com/in/janesmith,Product Manager- Upload CSV: Drag and drop your CSV file into the application window or click to browse.
- Enrich Data:
- Click Fetch Apollo to find emails based on name and organization.
- Click Fetch Zero Bounce to validate emails and find additional data.
- Click Fetch All to run both services sequentially.
- Review Results: The table will update with new columns like
Apollo EmailandZeroBounce Status. - Export: Click Download CSV to save the enriched data.
-
Click Email Users to open the email composer.
-
Sign In: Click Sign in using Popup to authenticate with your Microsoft (Outlook/Office 365) account.
-
Compose:
- Write your subject and message.
- Use variables from your CSV columns by wrapping headers in curly braces, e.g.,
{Name},{Organization}.
Template Example:
Hi {Name}, I saw you are working at {Organization} as a {Title}. -
Preview & Send:
- Click Preview to see how the variables render for the first few contacts.
- Click Send All to send the campaign.
- Click Draft All to create drafts in your "Drafts" folder instead of sending immediately.
- Node.js (v14 or higher)
- npm or yarn
- Clone the repository:
git clone https://github.com/Ashwin-Iyer1/row2reach.git cd row2reach - Install dependencies:
npm install
Run the application locally with hot-reload (if configured) or standard electron start:
npm startNote: In development, you can use a data/config.json file (copy from data/config.json.example) or use the in-app configuration page.
npm run buildMacThe built application will be in release-builds/Row_2_Reach-darwin-arm64/.
# Step 1: Build the Windows app
npm run buildWin
# Step 2: Create the installer (requires Windows or Wine)
npm run create-installerThe portable Windows app will be in release-builds/Row_2_Reach-win32-x64/, and the installer files will be in release-builds/installers/.
This application supports automatic updates via GitHub Releases.
- Build the app for the target platform.
- Sign & Notarize (Critical for macOS).
- Create Release:
- Tag a new version (e.g.,
v1.0.1). - Upload the artifacts:
- macOS:
.zipof the.appbundle. - Windows:
Row2ReachSetup.exe,RELEASES, and.nupkgfiles.
- macOS:
- Tag a new version (e.g.,
- Publish: The app will detect the new version on next launch.
electron-app/
├── app.js # Main Electron process
├── preload.js # Preload script for secure API exposure
├── index.html # Main application page
├── config.html # Configuration page
├── emails.html # Email composer page
├── src/ # Source code
│ ├── api/ # API integration logic (Apollo, ZeroBounce)
│ ├── handlers/ # Event handlers
│ ├── state/ # State management
│ └── utils/ # Utility functions
├── data/ # Local data storage
└── package.json
- Apollo API: Matches contacts based on name, organization, and LinkedIn URL.
- ZeroBounce API: Validates email addresses and provides deliverability status.
- API keys are stored locally using
electron-json-storage. - Keys are never exposed to the renderer process directly.
- All API calls are made through a secure context bridge.
- Microsoft Graph authentication uses MSAL for secure token handling.
- "Load a CSV first" error: Ensure you've uploaded a valid CSV file before trying to enrich data.
- API errors: Check that your API keys are correctly configured in the settings.
- No emails found: Verify your CSV contains the required columns (Name, Organization, LinkedIn).
Run the application with developer tools:
npm start
# Then press Ctrl+Shift+I (Windows/Linux) or Cmd+Option+I (macOS)- Fork the repository
- Create your feature branch:
git checkout -b feature/new-feature - Commit your changes:
git commit -am 'Add new feature' - Push to the branch:
git push origin feature/new-feature - Submit a pull request
This project is licensed under the ISC License - see the package.json file for details.
For support, please open an issue in the GitHub repository.