Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
120 lines (106 loc) · 5.68 KB
/
Copy path.env.example
File metadata and controls
120 lines (106 loc) · 5.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# ============================================================
# Franco environment variables
# Copy this file to .env and fill in your values: cp .env.example .env
# Never commit .env — it is gitignored.
# Pick ONE email provider below (set channels.email.provider in franco.yaml
# to match): gmail (recommended), smtp, or instantly. Everything else is
# optional but an email verifier (Reoon/ZeroBounce) is strongly recommended.
# ============================================================
# ------------------------------------------------------------
# EMAIL PROVIDER — how Franco sends and reads replies. Choose one.
#
# Option A: Gmail / Google Workspace [RECOMMENDED for <50 cold/day]
# Set provider: gmail in franco.yaml. Use a mailbox on a DEDICATED
# secondary domain (never your main one), with SPF/DKIM/DMARC set up.
# 1. Google Cloud Console → new project → enable the Gmail API
# 2. Credentials → OAuth client ID → type "Desktop app"
# 3. Paste the client id/secret below, then run: franco gmail auth
GMAIL_CLIENT_ID=
GMAIL_CLIENT_SECRET=
# Option B: Any SMTP + IMAP mailbox [AgentMail, Fastmail, Workspace app pw]
# Set provider: smtp in franco.yaml. IMAP_* defaults to the SMTP_* values.
SMTP_HOST=
SMTP_PORT=587
SMTP_USERNAME=
SMTP_PASSWORD=
IMAP_HOST=
IMAP_PORT=993
IMAP_USERNAME=
IMAP_PASSWORD=
# Option C: Instantly — cold email platform [legacy]
# Where to get it: https://app.instantly.ai → Settings → Integrations → API Keys
# API access requires Instantly's Growth plan or higher.
INSTANTLY_API_KEY=
# ------------------------------------------------------------
# LinkedIn — browser-automation prospecting [OPTIONAL]
# These are the credentials of the LinkedIn account Franco will log into
# with Playwright. WARNING: automation violates LinkedIn's Terms of Service
# and can get the account restricted or banned. Use a account you can
# afford to lose, keep the default rate limits, or leave blank to skip —
# Franco will prospect via web search and company websites instead.
LINKEDIN_EMAIL=
LINKEDIN_PASSWORD=
# ------------------------------------------------------------
# Cloudflare Browser Rendering — deep website crawling during training [OPTIONAL]
# Enables JS-rendered crawling of your own site when running `franco train`.
# Where to get it:
# Account ID: https://dash.cloudflare.com → right sidebar of any zone, or the URL
# API Token: https://dash.cloudflare.com/profile/api-tokens → Create Token
# → grant "Browser Rendering: Edit" permission
# Cost: ~$5/mo on the paid Workers plan (~12,000 pages). Free tier has limits.
# Without these, Franco uses its built-in HTTP crawler (no JS rendering).
CLOUDFLARE_ACCOUNT_ID=
CLOUDFLARE_API_TOKEN=
# ------------------------------------------------------------
# Email verification — how Franco confirms a prospect's address really
# exists before sending. Franco learns each company's email PATTERN, then
# verifies ONE candidate (raw SMTP probing no longer works against Google
# Workspace / Microsoft 365). Any ONE of these keys is enough; add both for
# best coverage. Without any, addresses are marked "guess" and never sent.
# Reoon — best free tier for cold-email verification (600 checks/month,
# renews monthly + 100 non-expiring). Good catch-all flagging.
# Where to get it: https://reoon.com/email-verifier → sign up → API
REOON_API_KEY=
# ZeroBounce — 100 free/month. Its 2026 engine is the reliable one for
# Microsoft 365 / Google Workspace catch-all domains; Franco routes those
# domains here specifically. https://zerobounce.net → API
ZEROBOUNCE_API_KEY=
# Hunter.io — email discovery + pattern lookup [OPTIONAL]
# Free tier: 50 verifications + 25 domain-searches/month. Its domain-search
# is the cheapest way to learn a company's email pattern (used first, so
# Franco verifies one address instead of guessing six).
# Where to get it: https://hunter.io → sign up → API → API Keys
HUNTER_API_KEY=
# Domain-searches per month across all of Franco. 25 matches Hunter's free
# tier; set this to your plan's allowance if you pay for Hunter.
HUNTER_MONTHLY_SEARCHES=25
# ------------------------------------------------------------
# DISCOVERY — where Franco finds businesses. [ALL OPTIONAL]
# The default source (OpenStreetMap) needs no account at all:
# franco discover
# See every option, with real prices, via:
# franco discover --providers (or the dashboard's Discover tab)
# ------------------------------------------------------------
# DataForSEO — cheapest local-business and SERP data anywhere.
# Where to get it: https://app.dataforseo.com/api-access
# NOTE: the API password is auto-generated there. It is NOT your account
# password. $1 free credit on signup; $50 minimum deposit to go live.
# Cost: $0.372 per 1,000 businesses; $0.0018 per depth-30 search.
DATAFORSEO_LOGIN=
DATAFORSEO_PASSWORD=
# Set to any value to route every call to DataForSEO's free sandbox. Same
# response shape, dummy data, never charged — the right way to try it.
DATAFORSEO_SANDBOX=
# Serper.dev — Google Search API, used for discovery and for Scout's searches.
# Where to get it: https://serper.dev → sign up → Dashboard → API Key
# Cost: 2,500 queries free with no card, then a $50 prepaid pack (credits
# expire after 6 months). Without it Franco falls back to DuckDuckGo/Bing
# scraping, which is heavily rate-limited.
SERPER_API_KEY=
# ------------------------------------------------------------
# Calendly — meeting auto-booking [NOT YET USED — roadmap]
# CALENDLY_API_KEY=
# --- Dashboard (optional) ---
# The dashboard only answers requests addressed to localhost / 127.0.0.1.
# Add other hostnames you reach it by (e.g. from Docker), comma-separated.
FRANCO_DASHBOARD_HOSTS=