n8n-nodes-apivault-local-leads 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +78 -0
- package/dist/credentials/ApifyApi.credentials.d.ts +9 -0
- package/dist/credentials/ApifyApi.credentials.js +37 -0
- package/dist/credentials/ApifyApi.credentials.js.map +1 -0
- package/dist/nodes/LocalLeads/LocalLeads.node.d.ts +5 -0
- package/dist/nodes/LocalLeads/LocalLeads.node.js +254 -0
- package/dist/nodes/LocalLeads/LocalLeads.node.js.map +1 -0
- package/dist/nodes/LocalLeads/localleads.svg +5 -0
- package/index.js +3 -0
- package/package.json +55 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 apivault_labs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# n8n-nodes-apivault-local-leads
|
|
2
|
+
|
|
3
|
+
An [n8n](https://n8n.io) community node for **Local Lead Finder Pro** — find local businesses by category + location and turn each one into an enriched B2B sales lead.
|
|
4
|
+
|
|
5
|
+
No login. Pay-as-you-go, no monthly subscription. The scraping and enrichment run server-side on [Apify](https://apify.com); this node is a thin connector you drive with your own Apify API token.
|
|
6
|
+
|
|
7
|
+
Built by **[apivault_labs](https://apify.com/apivault_labs)** — see [all our actors](https://apify.com/apivault_labs).
|
|
8
|
+
|
|
9
|
+
## Who it's for
|
|
10
|
+
|
|
11
|
+
Web agencies, hyper-local SEO shops and SDR teams. Search a category in a city (e.g. `plumbers` in `Miami FL`), and get back scored, contact-ready leads — including businesses with no website or a dead/DIY site, the hottest targets for a redesign pitch.
|
|
12
|
+
|
|
13
|
+
## What you get per lead (30+ fields)
|
|
14
|
+
|
|
15
|
+
- **Core**: name, category, address, phone, rating, review count, years in business, website
|
|
16
|
+
- **leadScore 0-100** + tier (cold / warm / hot / on-fire) + reasons
|
|
17
|
+
- **Website intel**: alive status, SSL validity, **tech stack** (Wix, WordPress, Shopify, Squarespace, GoDaddy, Webflow, Weebly, Joomla, Drupal, ClickFunnels, GoHighLevel)
|
|
18
|
+
- **Mobile-friendly** check + signals
|
|
19
|
+
- **SEO audit**: meta description, OG image, H1, JSON-LD, canonical + seoScore
|
|
20
|
+
- **Brand age** via Wayback Machine
|
|
21
|
+
- **Contacts**: real emails + phones scraped from the site, phone E.164 + click-to-call, contact page URL, email guesses, 5 social search URLs, bestContact
|
|
22
|
+
- **outreachPitch** — personalized cold-outreach opener
|
|
23
|
+
- **recommendations[]**
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
|
|
27
|
+
In your n8n instance:
|
|
28
|
+
|
|
29
|
+
1. Go to **Settings → Community Nodes**
|
|
30
|
+
2. Select **Install**
|
|
31
|
+
3. Enter `n8n-nodes-apivault-local-leads`
|
|
32
|
+
4. Confirm and install
|
|
33
|
+
|
|
34
|
+
## Credentials
|
|
35
|
+
|
|
36
|
+
This node uses an **Apify API token**:
|
|
37
|
+
|
|
38
|
+
1. Create a free account at [apify.com](https://apify.com)
|
|
39
|
+
2. Go to **Apify Console → Settings → Integrations** and copy your **API token**
|
|
40
|
+
3. In n8n, create new **Apify API** credentials and paste the token
|
|
41
|
+
|
|
42
|
+
A free Apify account includes monthly usage credits.
|
|
43
|
+
|
|
44
|
+
## Usage
|
|
45
|
+
|
|
46
|
+
- **Business Category** — e.g. `plumbers`, `dentists`, `restaurants`
|
|
47
|
+
- **Location** — city and state, e.g. `New York NY`
|
|
48
|
+
- **Pages to Scrape** — each page ~30 businesses
|
|
49
|
+
- **Only Without Website** — return only businesses with no website (hottest agency leads)
|
|
50
|
+
- **Export Format** — default JSON / CSV (HubSpot/Pipedrive columns) / both
|
|
51
|
+
- **Enrichment** — websites + tech stack + emails, email guesses, social URLs, outreach pitch, brand age, geocode
|
|
52
|
+
- **Filters** — exclude chains, min lead score, max results
|
|
53
|
+
|
|
54
|
+
## Pricing
|
|
55
|
+
|
|
56
|
+
Billed per lead through Apify (pay-per-event): **$4 / 1,000 leads** ($0.004 each). All enrichment included.
|
|
57
|
+
|
|
58
|
+
## Use cases
|
|
59
|
+
|
|
60
|
+
- **Web-agency prospecting** — find local businesses with no site or a dead/DIY site
|
|
61
|
+
- **Local SEO outreach** — score and prioritize businesses by online-presence gaps
|
|
62
|
+
- **CRM enrichment** — export CSV straight into HubSpot/Salesforce/Pipedrive
|
|
63
|
+
- **Territory building** — geocode leads for map plotting and routing
|
|
64
|
+
|
|
65
|
+
## Resources
|
|
66
|
+
|
|
67
|
+
- [Local Lead Finder Pro actor on Apify](https://apify.com/apivault_labs/local-business-lead-finder)
|
|
68
|
+
- [All actors by apivault_labs](https://apify.com/apivault_labs)
|
|
69
|
+
- Prefer Python? Use the [Python SDK](https://github.com/apivault-labs/local-lead-finder-python)
|
|
70
|
+
- [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/)
|
|
71
|
+
|
|
72
|
+
## License
|
|
73
|
+
|
|
74
|
+
[MIT](LICENSE)
|
|
75
|
+
|
|
76
|
+
## Keywords
|
|
77
|
+
|
|
78
|
+
`local-leads` `lead-generation` `b2b-prospecting` `yellowpages-scraper` `local-seo` `web-agency-leads` `outreach-automation` `crm-enrichment` `apollo-alternative` `n8n` `apify`
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class ApifyApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApifyApi = void 0;
|
|
4
|
+
class ApifyApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'apifyApi';
|
|
7
|
+
this.displayName = 'Apify API';
|
|
8
|
+
this.documentationUrl = 'https://docs.apify.com/platform/integrations/api';
|
|
9
|
+
this.properties = [
|
|
10
|
+
{
|
|
11
|
+
displayName: 'API Token',
|
|
12
|
+
name: 'apiToken',
|
|
13
|
+
type: 'string',
|
|
14
|
+
typeOptions: { password: true },
|
|
15
|
+
default: '',
|
|
16
|
+
required: true,
|
|
17
|
+
description: 'Your personal Apify API token. Find it in Apify Console → Settings → Integrations → API token. A free account includes monthly usage credits.',
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
this.authenticate = {
|
|
21
|
+
type: 'generic',
|
|
22
|
+
properties: {
|
|
23
|
+
headers: {
|
|
24
|
+
Authorization: '=Bearer {{$credentials.apiToken}}',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
this.test = {
|
|
29
|
+
request: {
|
|
30
|
+
baseURL: 'https://api.apify.com/v2',
|
|
31
|
+
url: '/users/me',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ApifyApi = ApifyApi;
|
|
37
|
+
//# sourceMappingURL=ApifyApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApifyApi.credentials.js","sourceRoot":"","sources":["../../credentials/ApifyApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,QAAQ;IAArB;QACC,SAAI,GAAG,UAAU,CAAC;QAElB,gBAAW,GAAG,WAAW,CAAC;QAE1B,qBAAgB,GAAG,kDAAkD,CAAC;QAEtE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EACV,+IAA+I;aAChJ;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,mCAAmC;iBAClD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,0BAA0B;gBACnC,GAAG,EAAE,WAAW;aAChB;SACD,CAAC;IACH,CAAC;CAAA;AAnCD,4BAmCC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare class LocalLeads implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LocalLeads = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const ACTOR_ID = 'apivault_labs~local-business-lead-finder';
|
|
6
|
+
class LocalLeads {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.description = {
|
|
9
|
+
displayName: 'Local Lead Finder Pro',
|
|
10
|
+
name: 'localLeads',
|
|
11
|
+
icon: 'file:localleads.svg',
|
|
12
|
+
group: ['transform'],
|
|
13
|
+
version: 1,
|
|
14
|
+
subtitle: '={{$parameter["category"] + " — " + $parameter["location"]}}',
|
|
15
|
+
description: 'Find local businesses by category + location and auto-enrich every lead: lead score, website tech stack, real emails, phone E.164, mobile + SEO audit, brand age and an outreach pitch.',
|
|
16
|
+
defaults: {
|
|
17
|
+
name: 'Local Lead Finder Pro',
|
|
18
|
+
},
|
|
19
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
20
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
21
|
+
usableAsTool: true,
|
|
22
|
+
credentials: [
|
|
23
|
+
{
|
|
24
|
+
name: 'apifyApi',
|
|
25
|
+
required: true,
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
properties: [
|
|
29
|
+
{
|
|
30
|
+
displayName: 'Business Category',
|
|
31
|
+
name: 'category',
|
|
32
|
+
type: 'string',
|
|
33
|
+
default: '',
|
|
34
|
+
required: true,
|
|
35
|
+
placeholder: 'plumbers',
|
|
36
|
+
description: 'Type of business to search for. Examples: plumbers, restaurants, dentists, auto-repair, lawyers, hair-salons.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
displayName: 'Location',
|
|
40
|
+
name: 'location',
|
|
41
|
+
type: 'string',
|
|
42
|
+
default: '',
|
|
43
|
+
required: true,
|
|
44
|
+
placeholder: 'New York NY',
|
|
45
|
+
description: "City and state. Examples: 'New York NY', 'Los Angeles CA', 'Miami FL'.",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
displayName: 'Pages to Scrape',
|
|
49
|
+
name: 'pages',
|
|
50
|
+
type: 'number',
|
|
51
|
+
typeOptions: { minValue: 1, maxValue: 10 },
|
|
52
|
+
default: 1,
|
|
53
|
+
description: 'Number of result pages to scrape (each page ~30 businesses)',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
displayName: 'Only Without Website',
|
|
57
|
+
name: 'onlyWithoutWebsite',
|
|
58
|
+
type: 'boolean',
|
|
59
|
+
default: false,
|
|
60
|
+
description: 'Whether to return only businesses that do not have a website (the hottest leads for web agencies)',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
displayName: 'Export Format',
|
|
64
|
+
name: 'exportFormat',
|
|
65
|
+
type: 'options',
|
|
66
|
+
options: [
|
|
67
|
+
{ name: 'Default (full JSON record)', value: 'default' },
|
|
68
|
+
{ name: 'CSV-Friendly (HubSpot/Pipedrive columns)', value: 'csv' },
|
|
69
|
+
{ name: 'Both (default + nested _csv field)', value: 'both' },
|
|
70
|
+
],
|
|
71
|
+
default: 'default',
|
|
72
|
+
description: 'Shape of each lead record',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
displayName: 'Enrichment',
|
|
76
|
+
name: 'enrichment',
|
|
77
|
+
type: 'collection',
|
|
78
|
+
placeholder: 'Add Enrichment Option',
|
|
79
|
+
default: {},
|
|
80
|
+
options: [
|
|
81
|
+
{
|
|
82
|
+
displayName: 'Check Websites (Alive + Tech Stack + Emails + Phones)',
|
|
83
|
+
name: 'enrichWebsites',
|
|
84
|
+
type: 'boolean',
|
|
85
|
+
default: true,
|
|
86
|
+
description: 'Whether to probe each lead website for alive status, SSL, tech stack (Wix, WordPress, Shopify, Squarespace, GoDaddy, Webflow, Weebly, Joomla, Drupal, ClickFunnels, GoHighLevel), real emails and phone numbers. Adds ~1-2 sec per lead with a website.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
displayName: 'Generate Email Guesses',
|
|
90
|
+
name: 'enrichEmailGuesses',
|
|
91
|
+
type: 'boolean',
|
|
92
|
+
default: true,
|
|
93
|
+
description: 'Whether to generate plausible email addresses (info@, contact@, hello@, office@) from the website domain as a fallback. Verify before sending.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
displayName: 'Build Social Search URLs',
|
|
97
|
+
name: 'enrichSocialUrls',
|
|
98
|
+
type: 'boolean',
|
|
99
|
+
default: true,
|
|
100
|
+
description: 'Whether to add 1-click search links for Facebook, Instagram, LinkedIn, Google Maps and Google search',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
displayName: 'Generate Outreach Pitch',
|
|
104
|
+
name: 'includeOutreachPitch',
|
|
105
|
+
type: 'boolean',
|
|
106
|
+
default: true,
|
|
107
|
+
description: 'Whether to auto-write a personalized cold-outreach opener tailored to the lead (no website / dead site / DIY builder / etc.)',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
displayName: 'Detect Brand Age (via Wayback Machine)',
|
|
111
|
+
name: 'enrichBrandAge',
|
|
112
|
+
type: 'boolean',
|
|
113
|
+
default: true,
|
|
114
|
+
description: 'Whether to query the Wayback Machine for the earliest archived snapshot. An established brand (5+ years) with a dead site is a prime replacement target (+10 leadScore).',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
displayName: 'Geocode Addresses (lat/lng via OpenStreetMap)',
|
|
118
|
+
name: 'enrichGeocode',
|
|
119
|
+
type: 'boolean',
|
|
120
|
+
default: false,
|
|
121
|
+
description: 'Whether to resolve every address to lat/lng via OpenStreetMap Nominatim. Off by default because it slows runs by ~1s per lead.',
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
displayName: 'Filters',
|
|
127
|
+
name: 'filters',
|
|
128
|
+
type: 'collection',
|
|
129
|
+
placeholder: 'Add Filter',
|
|
130
|
+
default: {},
|
|
131
|
+
options: [
|
|
132
|
+
{
|
|
133
|
+
displayName: 'Exclude Corporate Chains / Franchises',
|
|
134
|
+
name: 'excludeChains',
|
|
135
|
+
type: 'boolean',
|
|
136
|
+
default: false,
|
|
137
|
+
description: 'Whether to drop national chains and franchises (Roto-Rooter, Aamco, Subway, Great Clips, RE/MAX, ~50 brands). Most agencies skip these.',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
displayName: 'Minimum Lead Score',
|
|
141
|
+
name: 'minLeadScore',
|
|
142
|
+
type: 'number',
|
|
143
|
+
typeOptions: { minValue: 0, maxValue: 100 },
|
|
144
|
+
default: 0,
|
|
145
|
+
description: 'Drop leads below this composite score (0-100). Tiers: cold <35, warm 35-54, hot 55-74, on-fire 75+.',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
displayName: 'Max Results',
|
|
149
|
+
name: 'maxResults',
|
|
150
|
+
type: 'number',
|
|
151
|
+
typeOptions: { minValue: 0, maxValue: 1000 },
|
|
152
|
+
default: 0,
|
|
153
|
+
description: 'Hard cap on returned leads, applied after lead-score sorting. 0 = no cap. Keeps cost predictable.',
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
displayName: 'Advanced Options',
|
|
159
|
+
name: 'advancedOptions',
|
|
160
|
+
type: 'collection',
|
|
161
|
+
placeholder: 'Add Option',
|
|
162
|
+
default: {},
|
|
163
|
+
options: [
|
|
164
|
+
{
|
|
165
|
+
displayName: 'Max Concurrency',
|
|
166
|
+
name: 'maxConcurrency',
|
|
167
|
+
type: 'number',
|
|
168
|
+
typeOptions: { minValue: 1, maxValue: 5 },
|
|
169
|
+
default: 3,
|
|
170
|
+
description: 'Number of YellowPages pages to scrape in parallel',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
displayName: 'Timeout per Page (Seconds)',
|
|
174
|
+
name: 'timeout',
|
|
175
|
+
type: 'number',
|
|
176
|
+
typeOptions: { minValue: 30, maxValue: 300 },
|
|
177
|
+
default: 120,
|
|
178
|
+
description: 'Maximum time to wait for each YellowPages page',
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
async execute() {
|
|
186
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
187
|
+
const items = this.getInputData();
|
|
188
|
+
const returnData = [];
|
|
189
|
+
for (let i = 0; i < items.length; i++) {
|
|
190
|
+
try {
|
|
191
|
+
const category = this.getNodeParameter('category', i);
|
|
192
|
+
const location = this.getNodeParameter('location', i);
|
|
193
|
+
const pages = this.getNodeParameter('pages', i, 1);
|
|
194
|
+
const onlyWithoutWebsite = this.getNodeParameter('onlyWithoutWebsite', i, false);
|
|
195
|
+
const exportFormat = this.getNodeParameter('exportFormat', i, 'default');
|
|
196
|
+
const enrichment = this.getNodeParameter('enrichment', i, {});
|
|
197
|
+
const filters = this.getNodeParameter('filters', i, {});
|
|
198
|
+
const advanced = this.getNodeParameter('advancedOptions', i, {});
|
|
199
|
+
if (!category || !category.trim()) {
|
|
200
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Business Category is required', {
|
|
201
|
+
itemIndex: i,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (!location || !location.trim()) {
|
|
205
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Location is required', {
|
|
206
|
+
itemIndex: i,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
const body = {
|
|
210
|
+
category: category.trim(),
|
|
211
|
+
location: location.trim(),
|
|
212
|
+
pages,
|
|
213
|
+
onlyWithoutWebsite,
|
|
214
|
+
exportFormat,
|
|
215
|
+
enrichWebsites: (_a = enrichment.enrichWebsites) !== null && _a !== void 0 ? _a : true,
|
|
216
|
+
enrichEmailGuesses: (_b = enrichment.enrichEmailGuesses) !== null && _b !== void 0 ? _b : true,
|
|
217
|
+
enrichSocialUrls: (_c = enrichment.enrichSocialUrls) !== null && _c !== void 0 ? _c : true,
|
|
218
|
+
includeOutreachPitch: (_d = enrichment.includeOutreachPitch) !== null && _d !== void 0 ? _d : true,
|
|
219
|
+
enrichBrandAge: (_e = enrichment.enrichBrandAge) !== null && _e !== void 0 ? _e : true,
|
|
220
|
+
enrichGeocode: (_f = enrichment.enrichGeocode) !== null && _f !== void 0 ? _f : false,
|
|
221
|
+
excludeChains: (_g = filters.excludeChains) !== null && _g !== void 0 ? _g : false,
|
|
222
|
+
minLeadScore: (_h = filters.minLeadScore) !== null && _h !== void 0 ? _h : 0,
|
|
223
|
+
maxResults: (_j = filters.maxResults) !== null && _j !== void 0 ? _j : 0,
|
|
224
|
+
maxConcurrency: (_k = advanced.maxConcurrency) !== null && _k !== void 0 ? _k : 3,
|
|
225
|
+
timeout: (_l = advanced.timeout) !== null && _l !== void 0 ? _l : 120,
|
|
226
|
+
};
|
|
227
|
+
const options = {
|
|
228
|
+
method: 'POST',
|
|
229
|
+
url: `https://api.apify.com/v2/acts/${ACTOR_ID}/run-sync-get-dataset-items`,
|
|
230
|
+
body,
|
|
231
|
+
json: true,
|
|
232
|
+
};
|
|
233
|
+
const response = await this.helpers.requestWithAuthentication.call(this, 'apifyApi', options);
|
|
234
|
+
const results = Array.isArray(response) ? response : [response];
|
|
235
|
+
for (const result of results) {
|
|
236
|
+
returnData.push({ json: result, pairedItem: { item: i } });
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
if (this.continueOnFail()) {
|
|
241
|
+
returnData.push({
|
|
242
|
+
json: { error: error.message },
|
|
243
|
+
pairedItem: { item: i },
|
|
244
|
+
});
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, { itemIndex: i });
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return [returnData];
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
exports.LocalLeads = LocalLeads;
|
|
254
|
+
//# sourceMappingURL=LocalLeads.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalLeads.node.js","sourceRoot":"","sources":["../../../nodes/LocalLeads/LocalLeads.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
|
|
2
|
+
<rect width="64" height="64" rx="12" fill="#16A34A"/>
|
|
3
|
+
<path d="M32 14c-7.2 0-13 5.6-13 12.6 0 9 13 23.4 13 23.4s13-14.4 13-23.4C45 19.6 39.2 14 32 14z" fill="none" stroke="#fff" stroke-width="3.5" stroke-linejoin="round"/>
|
|
4
|
+
<circle cx="32" cy="27" r="5" fill="#16A34A" stroke="#fff" stroke-width="3.5"/>
|
|
5
|
+
</svg>
|
package/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-apivault-local-leads",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n community node for Local Lead Finder Pro — find local businesses by category + location and auto-enrich every lead: 0-100 lead score, website tech stack (Wix/WordPress/Shopify), real emails, phone E.164, mobile + SEO audit, brand age and a personalized outreach pitch. CSV export for HubSpot/Pipedrive. 30+ fields per lead. No login. Pay-as-you-go, no monthly fee.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://apify.com/apivault_labs/local-business-lead-finder",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"n8n-community-node-package",
|
|
9
|
+
"n8n",
|
|
10
|
+
"local-leads",
|
|
11
|
+
"lead-generation",
|
|
12
|
+
"b2b-prospecting",
|
|
13
|
+
"yellowpages-scraper",
|
|
14
|
+
"local-seo",
|
|
15
|
+
"web-agency-leads",
|
|
16
|
+
"outreach-automation",
|
|
17
|
+
"crm-enrichment",
|
|
18
|
+
"apollo-alternative",
|
|
19
|
+
"apify"
|
|
20
|
+
],
|
|
21
|
+
"author": {
|
|
22
|
+
"name": "apivault_labs"
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/apivault-labs/n8n-nodes-apivault-local-leads.git"
|
|
27
|
+
},
|
|
28
|
+
"main": "index.js",
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc && copyfiles \"nodes/**/*.svg\" dist",
|
|
31
|
+
"dev": "tsc --watch",
|
|
32
|
+
"prepublishOnly": "npm run build"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist"
|
|
36
|
+
],
|
|
37
|
+
"n8n": {
|
|
38
|
+
"n8nNodesApiVersion": 1,
|
|
39
|
+
"credentials": [
|
|
40
|
+
"dist/credentials/ApifyApi.credentials.js"
|
|
41
|
+
],
|
|
42
|
+
"nodes": [
|
|
43
|
+
"dist/nodes/LocalLeads/LocalLeads.node.js"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^20.10.0",
|
|
48
|
+
"copyfiles": "^2.4.1",
|
|
49
|
+
"n8n-workflow": "*",
|
|
50
|
+
"typescript": "^5.4.0"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"n8n-workflow": "*"
|
|
54
|
+
}
|
|
55
|
+
}
|