Queries the Domainer's Secret DB - a private, exclusive OSINT database that contains billions of records for you to gather data based on search terms. Features multi-threading, deduplication, and intelligent filtering to avoid scraping identical data gathered from different sources during a single search.
2. List Builder
Processes collected data to create targeted email campaigns with keyword filtering, name standardization, and email validation.
3. Gmail Automation
Why send 1000's of emails by hand? Automate email sending through Gmail using chrome, you can watch the bot work or set it to headless, emails are sent with AI-generated variations, bounce detection is integrated to avoid contacting a dead email a second time on a follow up campaign.
Stats are kept on various aspects of the email automation for tracking purposes. Never send the same email twice.. Only will contact numerous times if you are doing follow up emails.
⚠️ Important: Proper configuration of settings.txt required, script follows a specific workflow: Collect Data → Build List → Send Emails.
Installation & Setup
System Requirements
Python 3.8 or higher
Chrome browser installed
Minimum 4GB RAM (8GB recommended for large datasets)
The settings.txt file is the heart of the system configuration. Every option controls specific behavior.
API Configuration Settings
API-Token
Purpose: Your API authentication token
Format:API-Token: your-token-here
Required: Yes
Details: Without this poop, no data collection is possible. Get your token from the dashboard.
API-Total-Threads
Purpose: Number of concurrent threads for API requests when using "all" mode
Format:API-Total-Threads: 3 or API-Total-Threads: None
Default: 3
Range: 1-9 threads
Details: Higher thread counts speed up data collection but may hit rate limits. Use 1-2 for stable connections, 3-5 for good connections, 6-9 only if you have excellent bandwidth.
Rate Limiting: Using too many threads may trigger API rate limits, causing 429 errors.
API-Ignore-Hashed-PW
Purpose: Skip password hashes (20+ characters) during data collection
Format:API-Ignore-Hashed-PW: True
Default: False
Why use it: Hashed passwords are useless for most purposes and take up database space. Enable this to save storage and processing time.
Proxy Configuration (API)
Use-Proxy-For-API
Purpose: Route API requests through a proxy server
Format:Use-Proxy-For-API: True
When to use: If the API is blocked in your region or you need to hide your IP
Security: Use an app-specific password if 2FA is enabled. Never use your main Gmail account.
Headless
Purpose: Run Chrome in background without GUI
Format:Headless: False
When True: No browser window appears, faster execution
When False: See browser actions, useful for debugging
Incognito
Purpose: Use incognito mode (no saved cookies/profiles)
Format:Incognito: False
Impact: When True, you'll need to log in every time. When False, login sessions persist.
Email Campaign Settings
Max-Daily-Send
Purpose: Maximum emails to send in one session
Format:Max-Daily-Send: 50
Recommended: 20-50 for new accounts, 50-100 for established accounts
Warning: Sending too many emails triggers spam filters
Gmail-Send-Delay
Purpose: Random delay between emails (seconds)
Format:Gmail-Send-Delay: 60-300
How it works: Randomly waits between min-max seconds
Example scenarios:
30-60: Fast sending, higher risk
60-300: Balanced approach
300-600: Very safe, slow
Read-Random-Emails
Purpose: Read emails to appear more human-like
Format:Read-Random-Emails: True
Behavior: Opens and "reads" unread emails between sends
Read-Random-Amount
Purpose: How many emails to read
Format:Read-Random-Amount: 1-3
Options:
1-3: Read 1 to 3 random emails
5: Always read exactly 5
2-5: Read between 2 and 5
Email Templates
Base Template (Mail-Subject & Mail-Body)
Mail-Subject: Hello {First_Name}!
Mail-Body: Hi {First_Name},\n\nI hope this email finds you well.\n\nBest regards
Placeholder:{First_Name} gets replaced with recipient's name
Line breaks: Use \n for new lines
Additional Templates (1-3)
You can define up to 3 additional templates:
Mail-Subject-1: Quick question
Mail-Body-1: Hey there,\n\nJust wanted to reach out...
Mail-Subject-2: Following up
Mail-Body-2: Hi,\n\nI wanted to follow up on...
Mail-Subject-3: Important update
Mail-Body-3: Hello,\n\nI have an important update...
Usage: Templates are rotated randomly if multiple exist. Set any to "None" to disable.
AI-Instructions: You are a professional email writer. Create natural, engaging emails.
AI-Instructions-Generic
Purpose: Instructions for emails WITHOUT first names
Critical: Must NOT include {First_Name} placeholder
Example:
AI-Instructions-Generic: Write 15 professional emails without using any names. Start with generic greetings like "Hello" or "Hi there". Make each email unique and engaging.
AI-Instructions-Custom
Purpose: Instructions for emails WITH first names
Critical: MUST include {First_Name} placeholder
Example:
AI-Instructions-Custom: Write 15 personalized emails using {First_Name} placeholder. Start with "Hi {First_Name}" or "Hello {First_Name}". Make them warm and personal.
Critical: If AI-Instructions-Custom doesn't produce emails with {First_Name}, personalization will fail!
How it works: Looks for years in database leak descriptions
Example: "LinkedIn Database 2023" would match if 2023 is in range
Include-Undated-Results
Purpose: What to do with results that have no year
Format:Include-Undated-Results: True
True: Include results without years
False: Only include results with years in range
Bounce Detection Settings
Gmail-Bounce-Check
Purpose: Enable automatic bounce email detection
Format:Gmail-Bounce-Check: True
How it works: Scans inbox for delivery failure notifications
Gmail-Bounce-Check-Frequency
Purpose: How many days back to check for bounces
Format:Gmail-Bounce-Check-Frequency: 1
Range: 1-30 days
Recommendation: 1-3 days for active campaigns
Bounce detection automatically removes failed emails from future sends and deletes bounce notifications.
ZeroBounce Email Validation
ZeroBounce-API-Key
Purpose: API key for email validation service
Cost: ~$0.008 per email validation
ZeroBounce-Enable-Sanitization
Purpose: Validate emails before sending
Format:ZeroBounce-Enable-Sanitization: True
Benefits: Prevents sending to invalid emails, protects sender reputation
ZeroBounce-Revalidate-Days
Purpose: How long validation results remain valid
Format:ZeroBounce-Revalidate-Days: 60
Details: Cached results save API credits
Validation Results:
Valid: Email exists and can receive mail
Invalid: Email doesn't exist or has errors
Catch-all: Domain accepts all emails (risky)
Spamtrap: Known spam trap address (don't send!)
Abuse: Known to report spam
Do-not-mail: Suppression list
Batch Search Configuration
API-Batch-Search
Purpose: Enable automatic batch searching
Format:API-Batch-Search: True
API-Batch-Search-Targets
Purpose: List of search queries to run automatically
Format:API-Batch-Search-Targets: john smith | jane doe | manager london
Separator: Use pipe (|) character
API-Batch-Search-Total
Purpose: Records to collect per search
Format:API-Batch-Search-Total: 100 or * for all
Complete Workflow
Configure settings.txt
Set up all required configurations including API tokens, proxy settings, and email templates.
Run main.py
Execute python main.py to start the main menu.
Collect Data (Option 'y')
Query the API for data based on your search terms. Data is saved to main_master.db and text files.
Build List (Option 'y')
Filter collected data using keywords, create targeted campaigns, validate emails if configured.
Run Gmail Script (Option 'y')
Automate email sending through Gmail with AI-generated variations and bounce detection.
Data Collection Module
Search Query Input
When prompted "Enter search query:", you can enter:
Names: "john smith", "jane doe"
Emails: "user@domain.com"
Phone numbers: "+1234567890"
Keywords: "manager", "london", "developer"
Combinations: "john manager london"
Query Complexity & Cost
1 word queries
Complexity: 1
Cost Factor: Lowest
Example: "john"
2 word queries
Complexity: 5
Cost Factor: Medium
Example: "john smith"
3 word queries
Complexity: 16
Cost Factor: High
Example: "john smith london"
4+ word queries
Complexity: 40
Cost Factor: Very High
Example: "john smith manager london"
Record Limit Options
When asked "How many records do you want to save?":
Number (e.g., "100"): Collects exactly 100 records
"all": Activates multi-threaded mode, collects until no more data
Warning: Using "all" can collect massive amounts of data. Monitor your API credits!
Multi-Threading Mode
Activated when selecting "all" records:
Uses number of threads from API-Total-Threads
Much faster data collection
Higher API credit consumption
Automatic retry on failures
Stops when no new data for 5 consecutive attempts
Data Output
Database Storage
All data saved to main_master.db with automatic deduplication.
Text Files
Human-readable format in saved_results/Query_Name/
Deduplication
Automatic removal of duplicate records across all sources.
Year Filtering During Collection
If Search-By-Year: True, the system:
Scans each data source description for years
Only includes sources with years in your range
Optionally includes undated sources based on settings
Shows statistics: accepted vs filtered records
List Builder Module
Campaign Creation Workflow
The system uses a multi-stage filtering approach to create highly targeted campaigns from collected data:
1. Data Source Selection
Select which queries to include from main_master.db. View total records, email counts, and SMS counts for each source. Combine multiple sources with "1,2,3" syntax.
2. Campaign Naming
Choose descriptive names like "Crypto CEOs 2024" or "Luxury Real Estate Brokers". Names must be unique among active campaigns.
3. Filtering & Targeting
Apply sophisticated filters using keywords, regex, column selection, and validation to create precision-targeted lists.
Campaign Creation Options
Creating a New Campaign
Select Data Sources: Choose which queries to include (1,2,3 or 1 for single)
Name Your Campaign: Descriptive name like "UK Managers June 2024"
Choose Targeting Options: Multiple filtering methods available
Working with Existing Campaigns
View all campaigns with email/phone counts
Select by number (1, 2, 3, etc.)
Delete campaigns with "DELETE" command
Campaigns persist across sessions
Targeting Options Menu
The system provides 8 powerful targeting options that can be combined for precise filtering:
1. Import from CSV
Add external email lists. Place CSV files in import_data/ folder.
Configure as Campaign-Targeting-Keywords: word1, word2
Keyword Matching Options
Exact Match vs Partial Match
Exact Match (y) - "manager"
✓ Will Match: "manager"
✗ Won't Match: "managers", "management"
Best for: Precise titles, specific terms
Partial Match (n) - "manager"
✓ Will Match: "manager", "managers", "management"
✗ Won't Match: "manage"
Best for: Catching variations
Exact Match (y) - "smith"
✓ Will Match: "smith"
✗ Won't Match: "John Smith", "blacksmith"
Best for: Surnames only
Partial Match (n) - "smith"
✓ Will Match: "smith", "John Smith", "blacksmith"
✗ Won't Match: "smit"
Best for: Name variations
Special Email Pattern Matching
Email columns use special pattern:keyword(?:[^a-zA-Z]|$) This matches the keyword followed by a non-letter or end of string.
Example: "john" matches "john@company.com" and "john123@company.com" but NOT "johnson@company.com"
Identifies high-profile influencers and content creators who need personal brand domains. Perfect for FirstnameLastname.com or niche domains matching their content vertical.
Pro Tips
Focus on influencers with 100k+ followers (use regex to find)
Target those without .com domains already (check website fields)
Look for "verified" status in JSON data
Prioritize business emails over personal (indicates monetization)
Pro Tips for Domain Brokers
Best Practices:
Use Year Filtering: Focus on recent data (2022-2024) as older contacts may be outdated
Enable ZeroBounce: Validate emails before outreach to protect sender reputation
Leverage Regex: Create patterns to find specific title + company combinations
Email Pattern Matching: Ensures you get "john@company" not "johnson@company"
Multiple Campaigns: Create separate campaigns for each domain category/vertical
Block Wisely: Exclude job seekers, students, and low-level employees
JSON Search: Catches data in unmapped fields like LinkedIn URLs or bios
Name Standardization: AI cleans names for professional outreach
Test First: Run small test campaigns before scaling up
Gmail Automation Module
Login Process
Profile Management
Creates persistent Chrome profiles per email account. Stores cookies for faster login.
Automated Login
Handles email/password entry with human-like typing. Manages 2FA challenges if needed.
Cookie Persistence
Saves session cookies to skip login on future runs (unless incognito mode).
Email Reading Behavior
Between sending emails, the bot:
Checks Primary inbox for unread emails
Falls back to Promotions if Primary is empty
Opens and "reads" emails for 30-60 seconds (Primary) or 8-12 seconds (Promotions)
Randomly scrolls through content
Detects and processes bounce notifications
Marks non-bounce emails as unread (except in Promotions)
Email Sending Process
1. Recipient Selection
Loads unsent recipients from campaign
Checks for multiple email addresses per person
Skips bounced emails from current session
Validates email format
2. Compose Window
Waits 3-6 seconds before clicking compose
Handles popup dismissal
Types recipient email
Waits 3-15 seconds before subject
3. Email Variation Selection
The bot intelligently selects variations based on recipient data:
Has first name: Uses variation with {First_Name} placeholder
No first name: Uses generic variation without placeholder
4. Typing Behavior
Human-like typing speed (~90 WPM)
Makes typos every 30-50 words
Pauses to "correct" typos
Variable delays between characters
5. Sending Methods
Tries multiple methods in order:
Ctrl+Enter keyboard shortcut
Click Send button
Tab+Enter as fallback
Bounce Detection System
Automatic Detection
Identifies bounces by keywords:
"mail delivery failed"
"550 5.1.1"
"user unknown"
"mailbox unavailable"
"does not exist"
Bounce Processing
Extracts recipient email from bounce message
Marks as bounced in campaign database
Adds to session bounce list
Deletes the bounce notification
Skips this email in future sends
Final Bounce Check
After campaign completion:
Searches all emails from last N days
Processes each for bounce detection
Updates campaign database
Shows summary statistics
Session Statistics
Tracks and displays:
Start/end times
Total emails sent
Emails read
Bounces detected
Time elapsed
Database Structure
main_master.db
Central repository for all collected data.
Table: records_master
PRIMARY KEY: id
UNIQUE KEY: record_hash (prevents duplicates)
Core Fields:
- source_name: Which leak/database
- source_description: Leak details
- source_year: Extracted year (if date filtering enabled)
- query_used: Search term that found this record
- date_added: When collected
Identity Fields:
- full_name, first_name, middle_name, last_name
- username, nickname, suffix
Contact Fields:
- email, email1-5
- phone, phone1-6, phone_home, phone_mobile
Location Fields:
- address, street, city, state, country, zip_code
- latitude, longitude, continent
Personal Fields:
- gender, age, birth_date, relationship_status
- education, language, hobby, interested_in
Employment Fields:
- job_title, work, company, industry, income
Social Media:
- facebook_id, instagram_id, linkedin_url, telegram_id
Technical Fields:
- ip_address, user_agent, operating_system
Authentication:
- password, password_hash, salt
Special Fields:
- additional_data: JSON for unmapped fields
- add_to_list: 'yes'/'no' for filtering
campaigns_master.db
Manages all email campaigns and variations.
Table: campaigns
- campaign_id: Primary key
- campaign_name: User-defined name
- working_directory: Associated data source
- creation_date: When created
- total_records: Record count
- emails_sent: Tracking
- active: Boolean (soft delete)
Table: campaign_data
Core Fields:
- id, campaign_id (foreign key)
- email, phone, full_name, first_name, last_name
- city, state, country
Email Tracking:
- sender_email: Which account sent
- receiver_email: Recipient
- email_subject: What was sent
- email_body: Content
- time_sent: Timestamp
- total_sent: Count (handles resends)
- bounced: 'yes'/NULL
Status Fields:
- in_use: Prevents concurrent sending
- original_record_id: Link to main_master.db
The system generates unique email variations to avoid sending identical emails:
Personalized Variations
Contains {First_Name} placeholder
Used when recipient has a first name
Example: "Hi {First_Name}, I wanted to reach out..."
Generic Variations
No name placeholders
Used when recipient lacks first name
Example: "Hello, I wanted to reach out..."
Generation Process
Count Recipients: System counts how many have/lack first names
Check Existing: Looks for unused variations in database
Generate New: Creates more if needed using AI
Validate: Ensures personalized have placeholder, generic don't
Store: Saves to database for future use
AI Generation Settings
Critical: Your AI instructions MUST produce the correct variation type:
AI-Instructions-Custom: MUST include {First_Name} in outputs
AI-Instructions-Generic: Must NOT include {First_Name}
Example AI-Instructions-Custom
Write 15 unique email variations for cold outreach.
IMPORTANT: Every email MUST use {First_Name} placeholder at least once.
Start emails with greetings like "Hi {First_Name}" or "Hello {First_Name}".
Make them professional but friendly. Include:
- A personalized greeting with {First_Name}
- A value proposition
- A soft call to action
Return as JSON array with 'subject' and 'body' fields.
Use \n for line breaks in body.
Example AI-Instructions-Generic
Write 15 unique email variations for cold outreach.
IMPORTANT: Do NOT use any names or name placeholders.
Start with generic greetings like "Hello" or "Hi there".
Make them professional but friendly. Include:
- A generic but warm greeting
- A value proposition
- A soft call to action
Return as JSON array with 'subject' and 'body' fields.
Use \n for line breaks in body.
Email Variation Usage Logic
Recipient Has First Name: Yes
Example: "John"
Variation Type: Personalized with {First_Name}
Result: "Hi John, I wanted to..."
Recipient Has First Name: No
Example: empty/null
Variation Type: Generic without placeholder
Result: "Hello, I wanted to..."
Fallback Scenario
Situation: Has name but no personalized variations available
Variation Type: Falls back to generic
Result: "Hello, I wanted to..."
Variation Management
Used Count: Tracks how many times each variation was sent
Auto-cleanup: Variations used >3 times are deleted
Deduplication: Prevents identical variations via hash
Batch Generation: Creates 15 at a time to minimize API calls
Tip: Pre-generate variations by running List Builder without sending emails. This ensures variations are ready when you start emailing.
AI-Instructions-Custom: Write emails for {First_Name} living in New York.
Reference local topics like NYC traffic, subway, or weather.
Make the email feel locally relevant.
AI-Instructions-Custom: Write emails for real estate professionals named {First_Name}.
Reference market trends, property values, or client acquisition.
Use industry terminology appropriately.
Campaign Optimization
Send during business hours
Avoid weekends and holidays
Use professional subject lines
Include value propositions relevant to real estate
Scenario 5: Re-engagement Campaign
Goal
Re-contact previous campaign recipients who didn't bounce
Process
Export Previous Campaign:
Access campaigns_master.db
Export non-bounced emails to CSV
Create New Campaign:
Option 1: Import from CSV
Place file in import_data/
System skips duplicates automatically
Different Email Templates:
AI-Instructions-Custom: Write follow-up emails for {First_Name}.
Reference that you've reached out before.
Provide new information or a different angle.
Be respectful of their time.
Best Practices
Wait at least 2 weeks between campaigns
Change email subject significantly
Provide new value, don't just repeat
Honor any unsubscribe requests
Scenario 6: Multi-Language Campaign
Goal
Send emails in different languages based on location
Data Collection
Search by country: "spain", "mexico", "argentina"
Filter by language field if available
Campaign Setup
Create separate campaigns per language
Campaign 1: "Spanish Speakers 2024"
Campaign 2: "English Speakers 2024"
Language-Specific AI Instructions
AI-Instructions-Custom: Write professional emails in Spanish for {First_Name}.
Use formal Spanish business language.
Include proper Spanish email etiquette.
Important Considerations
Gmail interface must be in English for automation
Email content can be any language
Test special characters (ñ, á, é, etc.)
Consider time zones for sending
Scenario 7: High-Volume Data Collection
Goal
Collect maximum data for future campaigns
Batch Search Configuration
API-Batch-Search: True
API-Batch-Search-Targets: john | mary | david | michael | sarah | jessica
API-Batch-Search-Total: *
API-Total-Threads: 5
Search-By-Year: True
Search-By-Year-Start: 2022
Search-By-Year-Stop: 2024
AI-Instructions-Custom: Write emails for {First_Name} that:
- Are under 150 words
- Sound natural and conversational
- Avoid sales language and urgency
- Don't use ALL CAPS or excessive punctuation
- Include a clear but soft call-to-action
- Feel like a genuine human wrote them