Dentist & Doctor Lead Scraper — Dental Practice Contacts
Pricing
from $63.75 / 1,000 enriched healthcare leads
Dentist & Doctor Lead Scraper — Dental Practice Contacts
Find dentists, orthodontists, doctors and clinics by city. Collect public business emails, phones, websites and source links. Multi-city searches, exclusions and verification evidence. Export CSV or use the n8n Google Sheets template. Store-tier discounts available.
Pricing
from $63.75 / 1,000 enriched healthcare leads
Rating
0.0
(0)
Developer
Sam Kleespies
Maintained by CommunityActor stats
7
Bookmarked
330
Total users
14
Monthly active users
4 days ago
Last modified
Categories
Share
Dentist & Doctor Lead Scraper
New: Walkthrough: Dentist leads to Google Sheets — setup steps and importable n8n JSON below.
Start here: run the 3-lead sample. Inspect the source links, contact fields and verification status before scaling. No external data-provider API key is required; Apify Actor fees and platform usage apply.
Find healthcare practices by practice category and location, extract publicly listed business emails and social links, and export the results as JSON, CSV, or Excel. Useful for healthcare technology sales, agency prospecting, and business research.
Who this helps
- Dental software and services: find dental practices by city and inspect their public business details.
- Specialist research: choose Orthodontist or a Custom query for a narrower practice segment.
- Agencies: reuse a multi-city task and exclude known Maps URLs from earlier exports.
Quick start
- Choose a practice category and a city, such as Dentist — Chicago, IL.
- Start with 3–10 results and inspect the output.
- Enable email extraction and verification if you need contact information.
- Export the dataset. Use Full output to retain all verification evidence.
A result is a business record, not a guaranteed individual clinician email. Practices using contact forms or inaccessible websites may have no extracted email.
Pricing
The currently configured base event price is $75 per 1,000 returned business records ($0.075 per result), plus $0.00005 per Actor-start event. Start-event quantity depends on allocated memory (one per GB, minimum one); at 4 GB this is $0.0002. Apify platform usage is charged separately. The live Pricing tab is authoritative and may show applicable Store discounts.
| Returned records | Result fees before platform usage and startup |
|---|---|
| 10 | $0.75 |
| 100 | $7.50 |
| 500 | $37.50 |
Records without an email are still chargeable business records. Platform usage can occur even if a search returns no results or fails. Set Apify's run timeout and spending limits before running a large job. These prices do not imply a guarantee of email availability or deliverability.
Email verification: what the fields mean
- emailDomainHasMx: whether the domain has mail-exchange records. This does not verify an individual mailbox.
- emailVerified: true: SMTP accepted the recipient and rejected a random-recipient probe. This is evidence at check time, not a delivery guarantee.
- smtp_unavailable, dns_unavailable, smtp_accepted_unconfirmed, catch_all, and unknown: mailbox verification was inconclusive. These never produce a true verified flag.
- undeliverable, invalid_format, and no_mx_records identify negative checks; inspect the status rather than treating every false flag as an invalid mailbox.
Some providers block SMTP verification or accept all recipients. We do not guarantee a bounce-rate percentage. Verification can be disabled if you use a separate service.
Inputs
| Input | Purpose |
|---|---|
| businessType | Practice category; choose Custom for a custom query |
| location | City or region for a single search |
| locations | Optional list of up to 20 locations; overrides location |
| searchQuery | Custom query; use {location} when searching multiple cities |
| maxResults | Total result cap across all locations, 1–500 |
| excludeMapsUrls | Optional Maps URLs from an earlier export to exclude |
| enrichEmails | Extract email addresses from business websites |
| verifyEmails | Attempt DNS and SMTP checks on extracted emails |
| enrichSocials | Extract linked social profiles |
| outputFormat | full, hubspot, or salesforce |
| maxRuntimeSeconds | Soft processing budget checked between stages/batches |
| proxyUrl | Optional custom proxy; otherwise uses configured Apify proxy |
Multi-city and repeat workflows
Use locations for a single run across several cities. Results are deduplicated across the run by Maps identity and normalized business name/address. maxResults applies to the combined output.
For Custom searches, include a placeholder, such as dentists in {location}. Supply previously collected Maps URLs in excludeMapsUrls for a new-record workflow. This excludes matching businesses; it is not an automatic change-detection or update service.
The run checkpoints collected records and progress in its own default key-value store. Resurrecting an interrupted run reuses those checkpoints and reconciles completed dataset writes. Starting a separate run starts a fresh search. No shared customer dataset is used.
Completed enrichment batches are written as they finish. A failed or interrupted run can therefore contain useful partial output. The OUTPUT_SUMMARY key-value record reports result counts, email coverage, SMTP-confirmed counts, first-result timing, and completion status.
Get past previously collected listings
For repeat searches, set maxCandidatesPerLocation above maxResults and supply Maps URLs from your previous export in excludeMapsUrls. For example, scan up to 50 candidates to return at most 10 records. Excluded and duplicate records are removed before email/social enrichment and dataset output. The scan limit is optional (1–500 per location); omitting it preserves the previous remaining-result search limit.
A larger scan can increase separately billed platform usage and run time. It does not guarantee ten new records or complete coverage. Keep a run timeout and spending limit. A no_new_results summary means no new records were found in the inspected candidates, not that the entire city has no more businesses.
{"businessType": "Dentist","location": "Chicago, IL","maxResults": 10,"maxCandidatesPerLocation": 50,"excludeMapsUrls": [],"enrichEmails": true,"verifyEmails": false,"enrichSocials": false,"outputFormat": "full"}
Replace the empty exclusion array with your own prior Maps URLs. CID, place-ID and common embedded feature-ID links are normalized where available; different URLs are not always proof of different businesses. No history is shared across customer accounts.
Output and CRM imports
Full output includes name, category, address, phone, website, mapsUrl, rating, reviewCount, email, emailVerified, emailDomainHasMx, emailVerificationStatus, emailVerificationNote, allEmails, and socialLinks.
HubSpot and Salesforce modes provide convenient column names, but imports may require field mapping or custom properties in your CRM. Full output retains the most verification detail.
Reliability and limits
Google Maps coverage varies by query and location. Email extraction depends on publicly accessible website content. Business listings are not a verified directory of individually licensed clinicians.
Confirmed no-match searches are reported separately from source blocks or extraction failures. If a run fails, inspect its status and log before retrying. Partial records may already be present and billed. Start small when changing locations or query types.
For bulk use, keep a reasonable time and spending cap. The soft processing budget is checked between stages; an active network operation may finish after that budget. Apify's run timeout provides a separate hard control.
Automation
Use Apify Saved Tasks, schedules, API calls, and dataset exports for recurring workflows. Review data quality before sending leads into a CRM or outreach system. Use professional contact data responsibly and follow the rules applicable to your use.
Support and feedback
Open an issue with your search settings, expected result, and a fresh shared run link. Do not post API tokens, proxy credentials, or sensitive customer data. If the Actor is useful, an honest Store review helps other users assess it.
September 2026 update
- Domain validation no longer labels an unconfirmed mailbox as verified.
- Added bounded concurrent verification and catch-all handling.
- Added multi-location inputs, cross-location deduplication, exclusions, checkpoints, and batched result delivery.
- Source extraction errors no longer become silent empty successes.
- Corrected pricing examples and clarified email and CRM limitations.
Copyable input for your next run
This is a configuration example, not a guaranteed result count. Start small and set a run-cost limit. The result limit is shared across both cities. Add previous Maps URLs to excludeMapsUrls when you want new listings.
{"businessType": "Dentist","location": "Chicago, IL","locations": ["Chicago, IL","Austin, TX"],"maxResults": 10,"excludeMapsUrls": [],"enrichEmails": true,"verifyEmails": true,"enrichSocials": true,"outputFormat": "full"}
Related business segments
Use the dedicated Lawyer, Dentist, or Med Spa Actor for the segment you serve. Each has a small sample on its Examples tab.
Walkthrough: Dentist leads to Google Sheets
This starter workflow connects this Actor to a Google Sheet using n8n. It starts with ten results and uses your own service credentials. The Actor extracts public business information; email availability varies and the template does not send outreach.
1. Check a small sample
Open the prepared sample, review its settings and current Pricing tab, and inspect the resulting names, source URLs and contact fields. A sample run has normal Apify charges; it is not a promise of free data or a fixed number of matches.
2. Import and connect
Copy the workflow JSON below into a local .json file, then use n8n's Import from File. Alternatively paste the copied JSON onto a blank n8n canvas. The template uses built-in nodes and remains inactive.
Create/select an n8n Header Auth credential for your Apify account: header name Authorization, value Bearer YOUR_APIFY_TOKEN. Assign it to Start Actor, Get run, and Get dataset. Keep secrets in credentials, never in workflow JSON or public issues.
Create a Google Sheet with a tab named Leads. Put the following field names across row 1, one field per column, in this order:
mapsUrl name category address phone website email emailVerified emailVerificationStatus emailVerificationNote emailDomainHasMx rating reviewCount sourceRunId capturedAt
Select your Google Sheets credential in Append or update rows. In Configure, replace sheetDocumentId with the ID between /d/ and /edit in your Sheet URL. The match column is mapsUrl. Values are written as RAW text/data so scraped text is not executed as a spreadsheet formula.
3. Run once and inspect
In Configure, change businessType and location for your market. The locations array overrides location and shares the total maxResults cap. Keep the required location field present. Keep outputFormat full, which includes verification evidence. Email enrichment is on; SMTP verification and social enrichment are off initially. Enable them only when needed and review the current price.
Click Execute workflow. The Actor starts once, waits for completion, validates the dataset, and exports. Failed/aborted/timed-out runs and empty datasets stop before the destination write. Duplicate Maps URLs within a batch are removed. The Sheet appends new Maps URLs and updates matching rows. Blank fields can replace earlier values, so use a dedicated data sheet rather than your manually curated CRM.
Check your first exported rows against the Apify dataset. Do not interpret MX records, catch-all results or an unconfirmed SMTP check as a verified mailbox. The template marks emailVerified true only when the Actor also reports smtp_verified. No mailbox check guarantees delivery.
4. Repeat without avoidable costs
If export fails after scraping succeeded, copy the 17-character run ID from the Apify run page into existingRunId and execute again. This retries export without launching another paid scrape. Leave it blank when you want a fresh search. The template retrieves up to 101 records and fails above 100; use pagination before scaling beyond 100. Do not point it at a larger historical dataset expecting complete export.
For new prospects, add previous Maps URLs to excludeMapsUrls and rotate the locations or segment. Repeated searches can return the same listings. Destination deduplication does not make repeated scraping free.
Only after a successful manual test, optionally replace Manual start with an n8n Schedule Trigger. Choose your timezone and cadence, publish the workflow, prevent overlapping executions, and set a monthly budget. Keep existingRunId blank for fresh scheduled searches. Configure an n8n Error Workflow/notification for failed executions. This starter does not create a schedule or send alerts automatically.
Costs and compatibility
Each fresh execution can incur Actor result fees, applicable enrichment fees and separately billed Apify platform usage, plus any n8n/destination subscription costs. The default $2 maxTotalChargeUsd limits Actor event charges, not separately billed platform usage. The Actor timeout is 600 seconds; n8n execution timeout is 900 seconds. Consult the current Pricing tab before scaling.
The template uses HTTP Request 4.2, Code 2, IF 2.2, Wait 1.1 and Google Sheets 4.6. Local tests cover mapping and failure handling; a complete run against your own n8n and Google Sheets credentials is required before production use.
Manual export alternative
Run the Actor with full output, open the dataset, and export CSV or Excel. Import into a dedicated Google Sheet and deduplicate on mapsUrl.
Troubleshooting
- 401/403: check which service's credential is selected and its permissions.
- No leads / source failure: inspect the Apify run log and OUTPUT_SUMMARY; try a narrower, known location.
- Destination error: fix the destination and retry using existingRunId.
- Unexpected duplicates: compare Maps URLs, and avoid concurrent writes. Do not rename the mapsUrl match column.
- Need help: open an Actor issue with the run link, business type, location and expected/actual behavior. Do not include tokens or private customer data.
References: n8n workflow import, Apify API, Sheets append or update.
Importable n8n workflow JSON
{"name":"Dentist leads to Google Sheets | samstorm","nodes":[{"name":"Manual start","id":"manual-start","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[0,300],"parameters":{}},{"name":"Configure","id":"configure","type":"n8n-nodes-base.code","typeVersion":2,"position":[220,300],"parameters":{"jsCode":"// Edit these values. Existing run ID reuses results without starting a new paid run.\nconst config={\n \"actorId\": \"QcKrZyRWEIqX2GI09\",\n \"existingRunId\": \"\",\n \"sheetDocumentId\": \"REPLACE_WITH_GOOGLE_SHEET_ID\",\n \"sheetName\": \"Leads\",\n \"actorInput\": {\n \"businessType\": \"Dentist\",\n \"location\": \"Chicago, IL\",\n \"locations\": [\n \"Chicago, IL\",\n \"Austin, TX\"\n ],\n \"excludeMapsUrls\": [],\n \"maxResults\": 10,\n \"enrichEmails\": true,\n \"verifyEmails\": false,\n \"enrichSocials\": false,\n \"outputFormat\": \"full\"\n },\n \"maxActorEventChargeUsd\": 2,\n \"timeoutSeconds\": 600\n};\nif(!Number.isInteger(config.actorInput.maxResults) || config.actorInput.maxResults<1 || config.actorInput.maxResults>100) throw new Error('Set maxResults between 1 and 100.');\nif(config.actorInput.outputFormat!=='full') throw new Error('Keep outputFormat full for this mapping.');\nif(config.existingRunId && !/^[a-zA-Z0-9]{17}$/.test(config.existingRunId)) throw new Error('Enter the 17-character Apify run ID, not a URL.');\nif(!/^[a-zA-Z0-9_-]{20,}$/.test(config.sheetDocumentId) || config.sheetDocumentId.includes('REPLACE')) throw new Error('Set your Google Sheet document ID in Configure before starting.');\nreturn [{json:config}];"}},{"name":"Reuse existing run","id":"reuse-existing-run","type":"n8n-nodes-base.if","typeVersion":2.2,"position":[440,300],"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"Reuse existing run","leftValue":"={{ !!$json.existingRunId }}","rightValue":"","operator":{"type":"boolean","operation":"true"}}],"combinator":"and"},"options":{}}},{"name":"Start Actor","id":"start-actor","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[660,440],"parameters":{"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","options":{"timeout":75000,"response":{"response":{"responseFormat":"json"}}},"method":"POST","url":"=https://api.apify.com/v2/actors/{{ $json.actorId }}/runs","sendQuery":true,"queryParameters":{"parameters":[{"name":"build","value":"latest"},{"name":"waitForFinish","value":"60"},{"name":"timeout","value":"={{ $json.timeoutSeconds }}"},{"name":"memory","value":"4096"},{"name":"maxTotalChargeUsd","value":"={{ $json.maxActorEventChargeUsd }}"}]},"sendBody":true,"specifyBody":"json","jsonBody":"={{ $json.actorInput }}"},"retryOnFail":false,"maxTries":3,"waitBetweenTries":2000,"notes":"Choose your own Header Auth credential. Authorization: Bearer YOUR_TOKEN. Never embed tokens in this template.","notesInFlow":false},{"name":"Get run","id":"get-run","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[660,140],"parameters":{"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","options":{"timeout":75000,"response":{"response":{"responseFormat":"json"}}},"url":"=https://api.apify.com/v2/actor-runs/{{ $json.runId || $('Configure').first().json.existingRunId }}","sendQuery":true,"queryParameters":{"parameters":[{"name":"waitForFinish","value":"60"}]}},"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000,"notes":"Choose your own Header Auth credential. Authorization: Bearer YOUR_TOKEN. Never embed tokens in this template.","notesInFlow":false},{"name":"Validate run","id":"validate-run","type":"n8n-nodes-base.code","typeVersion":2,"position":[880,300],"parameters":{"jsCode":"const r=$input.first().json.data;\nconst config=$('Configure').first().json;\nif(!r || !/^[a-zA-Z0-9]{17}$/.test(r.id || '') || r.actId!==config.actorId) throw new Error('Unexpected Apify run response or wrong Actor. No records exported.');\nif(!['READY','RUNNING','SUCCEEDED'].includes(r.status)) throw new Error('Apify run '+r.id+' ended '+r.status+'. Inspect its log and partial dataset; no CRM write performed.');\nif(r.status==='SUCCEEDED' && !/^[a-zA-Z0-9]{17}$/.test(r.defaultDatasetId || '')) throw new Error('Succeeded run has no valid dataset ID.');\nreturn [{json:{runId:r.id,datasetId:r.defaultDatasetId || '',complete:r.status==='SUCCEEDED'}}];"}},{"name":"Run succeeded","id":"run-succeeded","type":"n8n-nodes-base.if","typeVersion":2.2,"position":[1100,300],"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"Run succeeded","leftValue":"={{ $json.complete }}","rightValue":"","operator":{"type":"boolean","operation":"true"}}],"combinator":"and"},"options":{}}},{"name":"Wait before next check","id":"wait-before-next-check","type":"n8n-nodes-base.wait","typeVersion":1.1,"position":[1100,100],"parameters":{"amount":15,"unit":"seconds"}},{"name":"Get dataset","id":"get-dataset","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[1320,300],"parameters":{"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","options":{"timeout":60000,"response":{"response":{"responseFormat":"json","fullResponse":true}}},"url":"=https://api.apify.com/v2/datasets/{{ $json.datasetId }}/items","sendQuery":true,"queryParameters":{"parameters":[{"name":"format","value":"json"},{"name":"clean","value":"true"},{"name":"limit","value":"101"}]}},"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000,"notes":"Choose your own Header Auth credential. Authorization: Bearer YOUR_TOKEN. Never embed tokens in this template.","notesInFlow":false},{"name":"Validate and map leads","id":"validate-and-map-leads","type":"n8n-nodes-base.code","typeVersion":2,"position":[1540,300],"parameters":{"jsCode":"const payload=$input.first().json;\nconst rows=payload.body;\nif(!Array.isArray(rows)) throw new Error('Expected a JSON dataset array. Check the Get dataset node response settings.');\nif(!rows.length) throw new Error('No leads returned. Review the Apify log and OUTPUT_SUMMARY before changing the search.');\nif(rows.length>100) throw new Error('This starter workflow supports at most 100 records; use dataset pagination for larger runs.');\nconst seen=new Set();\nconst result=[];\nconst runId=$('Validate run').last().json.runId;\nconst text=v=>typeof v==='string'?v.trim():'';\nfor(const row of rows){\n const name=text(row.name), mapsUrl=text(row.mapsUrl).split('#')[0];\n if(!name || !/^https:\\/\\/(?:[a-z0-9-]+\\.)?google\\.[a-z.]+\\/maps(?:\\/|\\?)/i.test(mapsUrl)) throw new Error('A record lacks a business name or valid Google Maps source. Nothing in this batch was exported.');\n if(seen.has(mapsUrl)) continue;\n seen.add(mapsUrl);\n const status=text(row.emailVerificationStatus);\n const email=text(row.email);\n result.push({json:{mapsUrl,name,category:text(row.category),address:text(row.address),phone:text(row.phone),website:text(row.website),email,\n emailVerified:!!email && row.emailVerified===true && status==='smtp_verified',\n emailVerificationStatus:status || (email?'not_checked':'no_email'),emailVerificationNote:text(row.emailVerificationNote),\n emailDomainHasMx:typeof row.emailDomainHasMx==='boolean'?row.emailDomainHasMx:'',\n rating:typeof row.rating==='number'?row.rating:'',reviewCount:typeof row.reviewCount==='number'?row.reviewCount:'',sourceRunId:runId,capturedAt:new Date().toISOString()}});\n}\nreturn result;"}},{"name":"Append or update rows","id":"append-or-update-rows","type":"n8n-nodes-base.googleSheets","typeVersion":4.6,"position":[1760,300],"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"value":"={{ $('Configure').first().json.sheetDocumentId }}","mode":"id"},"sheetName":{"__rl":true,"value":"={{ $('Configure').first().json.sheetName }}","mode":"name"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":["mapsUrl"],"schema":[{"id":"mapsUrl","displayName":"mapsUrl","required":false,"defaultMatch":true,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"name","displayName":"name","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"category","displayName":"category","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"address","displayName":"address","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"phone","displayName":"phone","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"website","displayName":"website","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"email","displayName":"email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"emailVerified","displayName":"emailVerified","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"emailVerificationStatus","displayName":"emailVerificationStatus","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"emailVerificationNote","displayName":"emailVerificationNote","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"emailDomainHasMx","displayName":"emailDomainHasMx","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"rating","displayName":"rating","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"reviewCount","displayName":"reviewCount","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"sourceRunId","displayName":"sourceRunId","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"capturedAt","displayName":"capturedAt","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{"cellFormat":"RAW","handlingExtraData":"error"}}},{"name":"Setup and limits","id":"setup-and-limits","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[0,-300],"parameters":{"content":"## Dentist leads to Google Sheets\n1. Read the setup walkthrough on the Actor README.\n2. Assign YOUR Apify Header Auth to the three Apify HTTP nodes.\n3. Select Google Sheets OAuth on Append or update rows. Create headers and set document ID.\n4. Review Configure, then test manually.\n\nDefaults: 10 results, verification off, 600-second Actor timeout. $2 is an Actor-event charge limit; separately billed platform usage still applies. Failed/empty runs stop export.\n\nTo retry export after a destination error, set existingRunId. Do not restart the Actor unnecessarily.\n\nNo automatic schedule. Prevent concurrent executions against the same destination.\nValidation: local control-flow/mapping tests; customer credential setup and live destination test required.","width":560,"height":520}}],"connections":{"Manual start":{"main":[[{"node":"Configure","type":"main","index":0}]]},"Configure":{"main":[[{"node":"Reuse existing run","type":"main","index":0}]]},"Reuse existing run":{"main":[[{"node":"Get run","type":"main","index":0}],[{"node":"Start Actor","type":"main","index":0}]]},"Start Actor":{"main":[[{"node":"Validate run","type":"main","index":0}]]},"Get run":{"main":[[{"node":"Validate run","type":"main","index":0}]]},"Validate run":{"main":[[{"node":"Run succeeded","type":"main","index":0}]]},"Run succeeded":{"main":[[{"node":"Get dataset","type":"main","index":0}],[{"node":"Wait before next check","type":"main","index":0}]]},"Wait before next check":{"main":[[{"node":"Get run","type":"main","index":0}]]},"Get dataset":{"main":[[{"node":"Validate and map leads","type":"main","index":0}]]},"Validate and map leads":{"main":[[{"node":"Append or update rows","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1","executionTimeout":900,"saveDataErrorExecution":"all","saveDataSuccessExecution":"none"},"pinData":{},"tags":[]}
