myleadfox-cli
v0.2.0
Published
Command-line access to the MyLeadFox e-commerce store database. Search millions of live stores, pull rows, look up domains and enrich contacts from your terminal.
Maintainers
Readme
myleadfox-cli
Search millions of live e-commerce stores from your terminal, and pipe the results wherever they need to go.
npm install -g myleadfox-cli
mlf login mlf_live_YOUR_KEY
mlf search --country US --platform shopify --min-products 50An API key comes with any paid MyLeadFox plan, from Settings → API keys. The API is not available on the Free Trial.
What you will type
# How many match, and an id to pull them with. One search credit, no rows.
mlf search --country US --platform shopify --min-products 50
# Five pages straight into a spreadsheet file.
mlf rows --search-id de11cac3 --pages 5 --csv > leads.csv
# Stores you already know by name. You pay only for the ones we hold.
mlf lookup gymshark.com,allbirds.com
# What enrichment would cost, without spending anything.
mlf enrich --file domains.txt --dry-run
# Learn the filter JSON by watching the flags build it.
mlf rows --country DE --has-email --print-filtersIt asks before it spends
The calls cost credits: one per search, one lead per row delivered, one enrichment credit per contact found. So anything that would spend 500 or more stops and shows you the price first.
The price is the real number, not the ceiling. Before a pull, the CLI counts the match set for one search credit — ask for three pages when twelve stores match and it says twelve leads, because you are charged per row delivered.
--dry-runprices it and stops.--yesskips the prompt. That is what a cron job passes, deliberately.- With no terminal attached it refuses rather than hanging on a prompt nobody can answer.
Output
Rows go to stdout; prices, prompts, progress and errors go to stderr. So --csv > file.csv
produces a file a spreadsheet can open, with nothing stray at the top of it.
| Flag | Output |
|---|---|
| (none) | a table to read |
| --json | one JSON array |
| --csv | CSV, with formula-leading cells neutralised |
| --ndjson | one JSON object per line, streamed as pages arrive |
Filters
Flags cover the common cases: --country, --platform, --min-products, --max-products,
--has-email, --domain-contains, --name-contains, --google-category, --search, --sort.
--google-category takes an official Google product category and includes everything below it —
it sends the API's branch filter on the google_category column:
mlf search --google-category "Apparel & Accessories > Clothing" --country USAnything they do not cover goes through --filter, which takes a raw filter object or an array of
them — so the CLI is never a smaller surface than the API:
mlf rows --filter '{"kind":"text","col":"tagline","mode":"contains","value":"coffee","not":true}'A repeated --country US --country GB becomes one filter with two values, because two filters
would AND and match nothing.
Your key
mlf login writes it to ~/.myleadfox/config.json, readable only by you. A flag beats the
environment, and the environment beats the file:
MYLEADFOX_API_KEY=mlf_live_... mlf search --country US # CI
mlf --key mlf_live_... search --country US # one callmlf config shows which key is in use and where it came from. It never prints the key itself.
Requirements
Node 18 or newer.
Links
- Docs — https://myleadfox.com/cli
- The API this wraps — https://myleadfox.com/api-docs
- For AI assistants — https://myleadfox.com/mcp
