firmoscope 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- firmoscope-0.1.0/PKG-INFO +146 -0
- firmoscope-0.1.0/README.md +138 -0
- firmoscope-0.1.0/firmoscope.egg-info/PKG-INFO +146 -0
- firmoscope-0.1.0/firmoscope.egg-info/SOURCES.txt +8 -0
- firmoscope-0.1.0/firmoscope.egg-info/dependency_links.txt +1 -0
- firmoscope-0.1.0/firmoscope.egg-info/entry_points.txt +2 -0
- firmoscope-0.1.0/firmoscope.egg-info/requires.txt +1 -0
- firmoscope-0.1.0/firmoscope.egg-info/top_level.txt +1 -0
- firmoscope-0.1.0/pyproject.toml +18 -0
- firmoscope-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: firmoscope
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Business lead scraper CLI powered by Playwright
|
|
5
|
+
Requires-Python: >=3.9
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: playwright
|
|
8
|
+
|
|
9
|
+
# 🔍 Firmoscope
|
|
10
|
+
|
|
11
|
+
> **Business lead scraper CLI powered by Playwright — free, fast, and runs entirely locally.**
|
|
12
|
+
|
|
13
|
+
Made by [KPZsProductions](https://github.com/KPZsProductions)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## What it does
|
|
18
|
+
|
|
19
|
+
Firmoscope searches Google Maps for businesses matching your query, then extracts contact details — phone numbers, email addresses, websites, and addresses — and saves them to a CSV file. Optionally filters to businesses **without a website** (prime leads), queries an AI model to analyse results, or exports directly to Google Sheets.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
### Option 1 — pipx (recommended)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pipx install firmoscope
|
|
29
|
+
playwright install chromium
|
|
30
|
+
firmoscope "Rybnik Mechanicy"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
> Install pipx first if needed: `pip install pipx`
|
|
34
|
+
|
|
35
|
+
### Option 2 — pip
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pip install firmoscope
|
|
39
|
+
playwright install chromium
|
|
40
|
+
firmoscope "Rybnik Mechanicy"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Option 3 — manual (no install)
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pip install playwright
|
|
47
|
+
playwright install chromium
|
|
48
|
+
python firmoscope.py
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Quick start
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Run interactively
|
|
57
|
+
firmoscope
|
|
58
|
+
|
|
59
|
+
# Run interactively (manual install)
|
|
60
|
+
python firmoscope.py
|
|
61
|
+
|
|
62
|
+
# Run with arguments
|
|
63
|
+
firmoscope "Rybnik Mechanicy"
|
|
64
|
+
firmoscope "Katowice Restauracje" --limit 30
|
|
65
|
+
firmoscope "Gliwice Dentyści" --limit 50 --output leady_dent.csv
|
|
66
|
+
|
|
67
|
+
# Only businesses without a website (best leads)
|
|
68
|
+
firmoscope "Wrocław Hydraulicy" --no-website
|
|
69
|
+
|
|
70
|
+
# Watch the browser (non-headless)
|
|
71
|
+
firmoscope "KrakĂłw Fryzjer" --no-headless
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## AI mode
|
|
77
|
+
|
|
78
|
+
Requires `OPENROUTER_API_KEY` set in your environment.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# One-shot AI question about the results
|
|
82
|
+
firmoscope "Rybnik Mechanicy" --limit 10 --ai "ktĂłre firmy nie majÄ… strony?"
|
|
83
|
+
|
|
84
|
+
# Interactive chat session
|
|
85
|
+
firmoscope "Rybnik Mechanicy" --limit 10 --chat
|
|
86
|
+
|
|
87
|
+
# Pick a specific model
|
|
88
|
+
firmoscope "Rybnik Mechanicy" --chat --model "anthropic/claude-3.5-haiku"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Output
|
|
94
|
+
|
|
95
|
+
CSV file with UTF-8-BOM encoding (opens cleanly in Excel/LibreOffice):
|
|
96
|
+
|
|
97
|
+
| Column | Description |
|
|
98
|
+
|---|---|
|
|
99
|
+
| `Nazwa` | Business name |
|
|
100
|
+
| `Telefon` | Phone number |
|
|
101
|
+
| `Email` | Email address |
|
|
102
|
+
| `Adres` | Street address |
|
|
103
|
+
| `Strona WWW` | Website URL |
|
|
104
|
+
| `Ma stronÄ™` | Has website (Tak/Nie) |
|
|
105
|
+
| `Link Google Maps` | Direct Google Maps link |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## How it works
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
main()
|
|
113
|
+
└─ run_scraper() — opens Google Maps, scrolls feed, collects place links
|
|
114
|
+
└─ scrape_business_details() — extracts phone, address, website, email per place
|
|
115
|
+
└─ try_scrape_website_for_email() — if no email on Maps, checks /kontakt etc.
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- Browser runs with Polish locale (`pl-PL`) and a real Chrome user-agent
|
|
119
|
+
- No paid APIs — pure Playwright scraping
|
|
120
|
+
- Zero external dependencies beyond `playwright` (and optionally `prompt_toolkit`)
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Requirements
|
|
125
|
+
|
|
126
|
+
- Python 3.9+
|
|
127
|
+
- `playwright` — `pip install playwright && playwright install chromium`
|
|
128
|
+
- `prompt_toolkit` *(optional)* — autocomplete in interactive mode
|
|
129
|
+
- `OPENROUTER_API_KEY` *(optional)* — AI analysis features
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Legal Notice
|
|
134
|
+
|
|
135
|
+
> **This tool is provided for educational and legitimate business research purposes only.**
|
|
136
|
+
|
|
137
|
+
- Firmoscope scrapes publicly visible information from Google Maps. Use of this tool must comply with [Google's Terms of Service](https://policies.google.com/terms) and any applicable local laws and regulations.
|
|
138
|
+
- The authors and contributors of this project **do not condone** the use of this software for spam, harassment, unsolicited marketing, or any activity that violates the privacy rights of individuals or organisations.
|
|
139
|
+
- Data collected through this tool may be subject to data protection regulations (e.g. GDPR in the European Union). You are solely responsible for how you store, process, and use any data you collect.
|
|
140
|
+
- **Use at your own risk.** The authors accept no liability for misuse of this software or for any consequences arising from its use.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
<p align="center">
|
|
145
|
+
Built with ❤️ by <a href="https://github.com/KPZsProductions">KPZsProductions</a>
|
|
146
|
+
</p>
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# 🔍 Firmoscope
|
|
2
|
+
|
|
3
|
+
> **Business lead scraper CLI powered by Playwright — free, fast, and runs entirely locally.**
|
|
4
|
+
|
|
5
|
+
Made by [KPZsProductions](https://github.com/KPZsProductions)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## What it does
|
|
10
|
+
|
|
11
|
+
Firmoscope searches Google Maps for businesses matching your query, then extracts contact details — phone numbers, email addresses, websites, and addresses — and saves them to a CSV file. Optionally filters to businesses **without a website** (prime leads), queries an AI model to analyse results, or exports directly to Google Sheets.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
### Option 1 — pipx (recommended)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pipx install firmoscope
|
|
21
|
+
playwright install chromium
|
|
22
|
+
firmoscope "Rybnik Mechanicy"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
> Install pipx first if needed: `pip install pipx`
|
|
26
|
+
|
|
27
|
+
### Option 2 — pip
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pip install firmoscope
|
|
31
|
+
playwright install chromium
|
|
32
|
+
firmoscope "Rybnik Mechanicy"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Option 3 — manual (no install)
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pip install playwright
|
|
39
|
+
playwright install chromium
|
|
40
|
+
python firmoscope.py
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Quick start
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Run interactively
|
|
49
|
+
firmoscope
|
|
50
|
+
|
|
51
|
+
# Run interactively (manual install)
|
|
52
|
+
python firmoscope.py
|
|
53
|
+
|
|
54
|
+
# Run with arguments
|
|
55
|
+
firmoscope "Rybnik Mechanicy"
|
|
56
|
+
firmoscope "Katowice Restauracje" --limit 30
|
|
57
|
+
firmoscope "Gliwice Dentyści" --limit 50 --output leady_dent.csv
|
|
58
|
+
|
|
59
|
+
# Only businesses without a website (best leads)
|
|
60
|
+
firmoscope "Wrocław Hydraulicy" --no-website
|
|
61
|
+
|
|
62
|
+
# Watch the browser (non-headless)
|
|
63
|
+
firmoscope "KrakĂłw Fryzjer" --no-headless
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## AI mode
|
|
69
|
+
|
|
70
|
+
Requires `OPENROUTER_API_KEY` set in your environment.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# One-shot AI question about the results
|
|
74
|
+
firmoscope "Rybnik Mechanicy" --limit 10 --ai "ktĂłre firmy nie majÄ… strony?"
|
|
75
|
+
|
|
76
|
+
# Interactive chat session
|
|
77
|
+
firmoscope "Rybnik Mechanicy" --limit 10 --chat
|
|
78
|
+
|
|
79
|
+
# Pick a specific model
|
|
80
|
+
firmoscope "Rybnik Mechanicy" --chat --model "anthropic/claude-3.5-haiku"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Output
|
|
86
|
+
|
|
87
|
+
CSV file with UTF-8-BOM encoding (opens cleanly in Excel/LibreOffice):
|
|
88
|
+
|
|
89
|
+
| Column | Description |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `Nazwa` | Business name |
|
|
92
|
+
| `Telefon` | Phone number |
|
|
93
|
+
| `Email` | Email address |
|
|
94
|
+
| `Adres` | Street address |
|
|
95
|
+
| `Strona WWW` | Website URL |
|
|
96
|
+
| `Ma stronÄ™` | Has website (Tak/Nie) |
|
|
97
|
+
| `Link Google Maps` | Direct Google Maps link |
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## How it works
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
main()
|
|
105
|
+
└─ run_scraper() — opens Google Maps, scrolls feed, collects place links
|
|
106
|
+
└─ scrape_business_details() — extracts phone, address, website, email per place
|
|
107
|
+
└─ try_scrape_website_for_email() — if no email on Maps, checks /kontakt etc.
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
- Browser runs with Polish locale (`pl-PL`) and a real Chrome user-agent
|
|
111
|
+
- No paid APIs — pure Playwright scraping
|
|
112
|
+
- Zero external dependencies beyond `playwright` (and optionally `prompt_toolkit`)
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Requirements
|
|
117
|
+
|
|
118
|
+
- Python 3.9+
|
|
119
|
+
- `playwright` — `pip install playwright && playwright install chromium`
|
|
120
|
+
- `prompt_toolkit` *(optional)* — autocomplete in interactive mode
|
|
121
|
+
- `OPENROUTER_API_KEY` *(optional)* — AI analysis features
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Legal Notice
|
|
126
|
+
|
|
127
|
+
> **This tool is provided for educational and legitimate business research purposes only.**
|
|
128
|
+
|
|
129
|
+
- Firmoscope scrapes publicly visible information from Google Maps. Use of this tool must comply with [Google's Terms of Service](https://policies.google.com/terms) and any applicable local laws and regulations.
|
|
130
|
+
- The authors and contributors of this project **do not condone** the use of this software for spam, harassment, unsolicited marketing, or any activity that violates the privacy rights of individuals or organisations.
|
|
131
|
+
- Data collected through this tool may be subject to data protection regulations (e.g. GDPR in the European Union). You are solely responsible for how you store, process, and use any data you collect.
|
|
132
|
+
- **Use at your own risk.** The authors accept no liability for misuse of this software or for any consequences arising from its use.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
<p align="center">
|
|
137
|
+
Built with ❤️ by <a href="https://github.com/KPZsProductions">KPZsProductions</a>
|
|
138
|
+
</p>
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: firmoscope
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Business lead scraper CLI powered by Playwright
|
|
5
|
+
Requires-Python: >=3.9
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: playwright
|
|
8
|
+
|
|
9
|
+
# 🔍 Firmoscope
|
|
10
|
+
|
|
11
|
+
> **Business lead scraper CLI powered by Playwright — free, fast, and runs entirely locally.**
|
|
12
|
+
|
|
13
|
+
Made by [KPZsProductions](https://github.com/KPZsProductions)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## What it does
|
|
18
|
+
|
|
19
|
+
Firmoscope searches Google Maps for businesses matching your query, then extracts contact details — phone numbers, email addresses, websites, and addresses — and saves them to a CSV file. Optionally filters to businesses **without a website** (prime leads), queries an AI model to analyse results, or exports directly to Google Sheets.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
### Option 1 — pipx (recommended)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pipx install firmoscope
|
|
29
|
+
playwright install chromium
|
|
30
|
+
firmoscope "Rybnik Mechanicy"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
> Install pipx first if needed: `pip install pipx`
|
|
34
|
+
|
|
35
|
+
### Option 2 — pip
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pip install firmoscope
|
|
39
|
+
playwright install chromium
|
|
40
|
+
firmoscope "Rybnik Mechanicy"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Option 3 — manual (no install)
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pip install playwright
|
|
47
|
+
playwright install chromium
|
|
48
|
+
python firmoscope.py
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Quick start
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Run interactively
|
|
57
|
+
firmoscope
|
|
58
|
+
|
|
59
|
+
# Run interactively (manual install)
|
|
60
|
+
python firmoscope.py
|
|
61
|
+
|
|
62
|
+
# Run with arguments
|
|
63
|
+
firmoscope "Rybnik Mechanicy"
|
|
64
|
+
firmoscope "Katowice Restauracje" --limit 30
|
|
65
|
+
firmoscope "Gliwice Dentyści" --limit 50 --output leady_dent.csv
|
|
66
|
+
|
|
67
|
+
# Only businesses without a website (best leads)
|
|
68
|
+
firmoscope "Wrocław Hydraulicy" --no-website
|
|
69
|
+
|
|
70
|
+
# Watch the browser (non-headless)
|
|
71
|
+
firmoscope "KrakĂłw Fryzjer" --no-headless
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## AI mode
|
|
77
|
+
|
|
78
|
+
Requires `OPENROUTER_API_KEY` set in your environment.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# One-shot AI question about the results
|
|
82
|
+
firmoscope "Rybnik Mechanicy" --limit 10 --ai "ktĂłre firmy nie majÄ… strony?"
|
|
83
|
+
|
|
84
|
+
# Interactive chat session
|
|
85
|
+
firmoscope "Rybnik Mechanicy" --limit 10 --chat
|
|
86
|
+
|
|
87
|
+
# Pick a specific model
|
|
88
|
+
firmoscope "Rybnik Mechanicy" --chat --model "anthropic/claude-3.5-haiku"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Output
|
|
94
|
+
|
|
95
|
+
CSV file with UTF-8-BOM encoding (opens cleanly in Excel/LibreOffice):
|
|
96
|
+
|
|
97
|
+
| Column | Description |
|
|
98
|
+
|---|---|
|
|
99
|
+
| `Nazwa` | Business name |
|
|
100
|
+
| `Telefon` | Phone number |
|
|
101
|
+
| `Email` | Email address |
|
|
102
|
+
| `Adres` | Street address |
|
|
103
|
+
| `Strona WWW` | Website URL |
|
|
104
|
+
| `Ma stronÄ™` | Has website (Tak/Nie) |
|
|
105
|
+
| `Link Google Maps` | Direct Google Maps link |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## How it works
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
main()
|
|
113
|
+
└─ run_scraper() — opens Google Maps, scrolls feed, collects place links
|
|
114
|
+
└─ scrape_business_details() — extracts phone, address, website, email per place
|
|
115
|
+
└─ try_scrape_website_for_email() — if no email on Maps, checks /kontakt etc.
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- Browser runs with Polish locale (`pl-PL`) and a real Chrome user-agent
|
|
119
|
+
- No paid APIs — pure Playwright scraping
|
|
120
|
+
- Zero external dependencies beyond `playwright` (and optionally `prompt_toolkit`)
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Requirements
|
|
125
|
+
|
|
126
|
+
- Python 3.9+
|
|
127
|
+
- `playwright` — `pip install playwright && playwright install chromium`
|
|
128
|
+
- `prompt_toolkit` *(optional)* — autocomplete in interactive mode
|
|
129
|
+
- `OPENROUTER_API_KEY` *(optional)* — AI analysis features
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Legal Notice
|
|
134
|
+
|
|
135
|
+
> **This tool is provided for educational and legitimate business research purposes only.**
|
|
136
|
+
|
|
137
|
+
- Firmoscope scrapes publicly visible information from Google Maps. Use of this tool must comply with [Google's Terms of Service](https://policies.google.com/terms) and any applicable local laws and regulations.
|
|
138
|
+
- The authors and contributors of this project **do not condone** the use of this software for spam, harassment, unsolicited marketing, or any activity that violates the privacy rights of individuals or organisations.
|
|
139
|
+
- Data collected through this tool may be subject to data protection regulations (e.g. GDPR in the European Union). You are solely responsible for how you store, process, and use any data you collect.
|
|
140
|
+
- **Use at your own risk.** The authors accept no liability for misuse of this software or for any consequences arising from its use.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
<p align="center">
|
|
145
|
+
Built with ❤️ by <a href="https://github.com/KPZsProductions">KPZsProductions</a>
|
|
146
|
+
</p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
playwright
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "firmoscope"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Business lead scraper CLI powered by Playwright"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
dependencies = ["playwright"]
|
|
12
|
+
|
|
13
|
+
[project.scripts]
|
|
14
|
+
firmoscope = "firmoscope:main"
|
|
15
|
+
|
|
16
|
+
[tool.setuptools.packages.find]
|
|
17
|
+
where = ["."]
|
|
18
|
+
include = ["firmoscope*"]
|