Citation Builder
Pricing
from $0.01 / 1,000 results
Citation Builder
Build local SEO citations by automatically submitting your business NAP (Name, Address, Phone) to 45+ directories. Why Citations Matter Local citations are mentions of your business name, address, and phone number on other websites. They're a critical local SEO ranking factor:
Pricing
from $0.01 / 1,000 results
Rating
0.0
(0)
Developer
The Howlers
Actor stats
5
Bookmarked
38
Total users
6
Monthly active users
7 days ago
Last modified
Categories
Share
Citation Builder v2.1 — Audit, Submit & Sync 45+ Directories
Audit citations across 45+ directories with AI-powered extraction (Firecrawl fallback), cross-validation engine (weighted canonical NAP detection), Claude AI health scoring + correction suggestions, industry-specific niche directories (16+ across 6 industries).
BYOK (Bring Your Own Key) -- you provide your own API credentials.
Before You Start
This actor requires your own API credentials to fetch real data.
Where to get your key: For Data Axle aggregator submission (full mode only). Uses /v3/places/claims endpoint to create/claim listings that feed YP, SuperPages, DexKnows + 100+ downstream directories.
You can test with Demo Mode first (free, no key needed) to see the output format before committing.
Quick Start
Test with Demo Mode (free, no API key needed)
{"demoMode": true,"businessName": "John's Plumbing & HVAC","streetAddress": "123 Main Street","city": "Dallas","state": "TX","zipCode": "75001","phone": "(214) 555-1234","categories": ["Plumber","HVAC Contractor"],"facebookUrl": "https://example.com","linkedinUrl": "https://example.com","twitterUrl": "https://example.com","instagramUrl": "https://example.com","proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Run with real data
{"demoMode": false,"mode": "audit","businessName": "John's Plumbing & HVAC","streetAddress": "123 Main Street","city": "Dallas","state": "TX","zipCode": "75001","phone": "(214) 555-1234","categories": ["Plumber","HVAC Contractor"],"facebookUrl": "https://example.com","linkedinUrl": "https://example.com","twitterUrl": "https://example.com","instagramUrl": "https://example.com","verifyAfterSubmit": false,"dryRun": false,"maxConcurrent": 3,"dataAxleApiKey": "YOUR_API_KEY_HERE","yextApiKey": "YOUR_API_KEY_HERE","brightLocalApiKey": "YOUR_API_KEY_HERE","anthropicApiKey": "YOUR_API_KEY_HERE","firecrawlApiKey": "YOUR_API_KEY_HERE","captchaSolverApiKey": "YOUR_API_KEY_HERE","enableAiAnalysis": true,"enableCrossValidation": true,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Input Parameters
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
mode | string | "audit" | No | audit = check 45+ directories for existing citations and NAP consistency. submit = audit + auto-fill free directories + copy-paste data for login-required ones. full = audit + submit + push to Data Axle/Yext/BrightLocal APIs. |
businessName | string | - | No | Your official business name (must match exactly across all citations) |
streetAddress | string | - | No | Your business street address |
city | string | - | No | City name |
state | string | - | No | 2-letter state code |
zipCode | string | - | No | 5-digit ZIP code |
phone | string | - | No | Primary business phone (will be formatted consistently) |
website | string | - | No | Your business website (optional but recommended) |
email | string | - | No | Contact email address (optional) |
description | string | - | No | Brief description of your business (150-300 characters recommended) |
categories | array | - | No | Business categories — used for Yext taxonomy mapping and industry directory detection (e.g., 'Plumber', 'HVAC Contractor', 'Dentist', 'Attorney') |
industry | string | - | No | Your industry — unlocks niche directories. Examples: 'home services' adds HomeAdvisor/Porch/Thumbtack/Houzz; 'legal' adds Avvo/FindLaw/Justia; 'healthcare' adds Healthgrades/Zocdoc/Vitals; 'real estate' adds Zillow/Realtor.com; 'restaurant' adds OpenTable/Zomato; 'auto' adds CarGurus/RepairPal. |
facebookUrl | string | - | No | Your Facebook business page URL |
linkedinUrl | string | - | No | Your LinkedIn company page URL |
twitterUrl | string | - | No | Your Twitter/X profile URL |
instagramUrl | string | - | No | Your Instagram profile URL |
verifyAfterSubmit | boolean | false | No | After submitting to directories, re-audit them to confirm the listing went live. Most directories take 24-72h to index, so immediate verification may show 'not yet live'. |
dryRun | boolean | false | No | Legacy compatibility — setting this to true maps to mode='audit'. Use the 'mode' field instead. |
directories | array | - | No | Only audit/submit these directories (leave empty for all 45+) |
skipDirectories | array | - | No | Skip these directories (e.g., 'BBB' if you're not a member) |
maxConcurrent | integer | 3 | No | Number of directories to process simultaneously |
dataAxleApiKey | string | - | Yes* | For Data Axle aggregator submission (full mode only). Uses /v3/places/claims endpoint to create/claim listings that feed YP, SuperPages, DexKnows + 100+ downstream directories. |
yextApiKey | string | - | Yes* | For Yext Knowledge API entity creation (full mode only). Your categories are auto-mapped to Yext taxonomy IDs. Syncs to 200+ directories via PowerListings. |
brightLocalApiKey | string | - | Yes* | For BrightLocal Citation Builder campaign (full mode only). Creates a managed campaign — BrightLocal's team handles submissions within 5-7 business days. |
anthropicApiKey | string | - | Yes* | Powers AI analysis: health scoring, correction suggestions, prioritized actions, estimated ranking impact. Uses Claude Sonnet for intelligent citation recommendations. |
firecrawlApiKey | string | - | Yes* | AI-powered extraction fallback. When CSS selectors fail (common on React SPAs like Healthgrades, Zocdoc, etc.), Firecrawl's AI extracts NAP data directly from page content. |
captchaSolverProvider | string | - | No | Which CAPTCHA solving service to use. All three support reCAPTCHA v2/v3, hCaptcha, and Turnstile. CapSolver also supports image CAPTCHAs. Requires captchaSolverApiKey. |
captchaSolverApiKey | string | - | Yes* | API key for your chosen CAPTCHA solver (CapSolver, 2Captcha, or Anti-Captcha). Without this, CAPTCHAs are screenshotted for manual completion. |
enableAiAnalysis | boolean | true | No | Run Claude AI analysis on results for health scoring, correction suggestions, and impact estimates. Requires anthropicApiKey. |
enableCrossValidation | boolean | true | No | Use weighted voting across directories to determine your canonical (most likely correct) NAP. Detects name/address/phone variations. |
googlePlaceId | string | - | No | Your GBP Place ID. If provided, GBP is treated as source of truth (always correct) and all other citations are compared against it. |
businesses | array | - | No | Array of businesses to audit in sequence. Each object needs: businessName, streetAddress, city, state, zipCode, phone. Optional: website, email, categories, industry. |
demoMode | boolean | true | No | Run in demo mode without real credentials. Returns sample v2 audit results for testing. |
webhookUrl | string | - | No | Optional URL to receive results via POST request when actor completes |
proxy | object | - | No | Proxy settings for web requests |
*Required when Demo Mode is off.
Pricing
This actor uses pay-per-event billing:
| Event | Description | Price |
|---|---|---|
| Citation Audited | NAP checked on one directory (search + extract + compare) | $0.05 |
| Citation Submitted | Form auto-filled and submitted to a free directory | $0.25 |
| Aggregator API Push | Business data pushed to Data Axle, Yext, or BrightLocal API | $0.50 |
Demo mode is free -- no charges for sample data.
Troubleshooting
"API key is required"
You have Demo Mode turned off but didn't provide an API key. Either:
- Turn Demo Mode on to test with sample data
- Add your API key in the input
"API error 403" or "Unauthorized"
Your API key is invalid, expired, or doesn't have access to this specific API endpoint. Double-check your key and account permissions.
"API error 429" or "Rate limit"
Too many requests. Wait a minute and try again, or reduce the number of items per run.
No results or empty dataset
Check the run log for error messages. Common causes:
- Invalid input format (check the examples above)
- API key without proper permissions
- The target data doesn't exist or is too small to track
How do I test without an API key?
Enable Demo Mode in the input. This returns realistic sample data so you can verify the output format works for your workflow.
Built by John Rippy | Actor Arsenal