Citation Builder
Pricing
from $50.00 / 1,000 citation auditeds
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 $50.00 / 1,000 citation auditeds
Rating
0.0
(0)
Developer
The Howlers
Maintained by CommunityActor stats
8
Bookmarked
65
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Security
Limited permissionsShare
Citation Builder: Audit, Submit and Sync 45+ Directories
Audit your business's citations across 45+ directories, find NAP (name, address, phone) mismatches, auto-fill free directory forms, and optionally push your listing to Data Axle, Yext or BrightLocal. Adds niche directories for 16+ industries, a cross-validated canonical NAP, and optional Claude AI health scoring.
No API key is needed for an audit. Keys are only used for the optional extras: full mode pushes (Data Axle, Yext, BrightLocal), AI analysis (Anthropic) and AI extraction (Firecrawl).
How directories are read
Each directory is opened in a normal Firefox browser, the way a person would visit it: no stealth add-ons, no fingerprint spoofing, no proxy rotation, and no CAPTCHA or security-check solving.
- Before opening any page, the actor checks that site's robots.txt. Pages a site closes to automated access are skipped and reported as
not_permitted. Google search is one of them, so Google Business Profile is reported this way. - A directory that answers with a block or security check is reported as
blocked. - A directory with no public search page is reported as
not_checked, unless you give its listing URL inprovidedUrls(orfacebookUrl,linkedinUrl,instagramUrl). - Forms with a CAPTCHA are never submitted. You get
captcha_detectedplus copy-paste data to submit by hand.
blocked, not_permitted, not_checked and error directories are listed in the recommendations so you can check them by hand. They are never charged and never count toward the health score.
Quick Start
Run a live audit
{"mode": "audit","businessName": "Gary Danko","streetAddress": "800 N Point St","city": "San Francisco","state": "CA","zipCode": "94109","phone": "(415) 749-2060","website": "https://www.garydanko.com","categories": ["Restaurant"]}
Sample output
Set "demoMode": true, or run with no business details, to get one labeled sample audit that shows the output format. It carries demo: true and a _notice field, makes no external calls, and charges no task events.
Batch mode
Put several businesses in businesses and each one gets its own full audit row, one after another.
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 | - | Yes, for a live audit | Your official business name |
streetAddress | string | - | Yes, for a live audit | Your business street address |
city | string | - | Yes, for a live audit | City name |
state | string | - | Yes, for a live audit | 2-letter state code |
zipCode | string | - | Yes, for a live audit | 5-digit ZIP code |
phone | string | - | Yes, for a live audit | 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, which 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, linkedinUrl, instagramUrl | string | - | No | Your page on that site, read directly as its listing (if its robots.txt allows it) |
providedUrls | object | - | No | Listing URLs you already know, keyed by directory name, read directly instead of searching |
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 at the same time (1 to 5) |
dataAxleApiKey | string | - | Full mode only | Data Axle aggregator submission. Uses /v3/places/claims to create/claim listings that feed YP, SuperPages, DexKnows + 100+ downstream directories. |
yextApiKey | string | - | Full mode only | Yext Knowledge API entity creation. Your categories are auto-mapped to Yext taxonomy IDs. |
brightLocalApiKey | string | - | Full mode only | BrightLocal Citation Builder campaign. BrightLocal's team handles submissions within 5-7 business days. |
anthropicApiKey | string | - | No | Powers AI analysis: health scoring, correction suggestions, prioritized actions, estimated ranking impact. |
firecrawlApiKey | string | - | No | AI extraction fallback for listing pages that loaded but whose layout the CSS selectors could not read. |
enableAiAnalysis | boolean | true | No | Run Claude AI analysis on results. Requires anthropicApiKey. |
enableCrossValidation | boolean | true | No | Use weighted voting across directories to determine your canonical (most likely correct) NAP. |
businesses | array | - | No | Businesses to audit in sequence. Each object needs: businessName, streetAddress, city, state, zipCode, phone. Optional: website, email, categories, industry. |
demoMode | boolean | false | No | Return labeled sample audit results instead of a live audit |
webhookUrl | string | - | No | Optional URL to receive results via POST request when actor completes |
Pricing
This actor uses pay-per-event billing:
| Event | When it is charged | Price |
|---|---|---|
| Actor start | Once when the run starts, one event per GB of memory (minimum one). At the default 2 GB of memory a run starts at $0.20 | $0.10 per GB |
| Citation Audited | NAP checked on one directory (search + extract + compare) | $0.05 |
| Citation Submitted | Per directory submission | $0.15 |
| Aggregator API Push | Business data pushed to Data Axle, Yext, or BrightLocal API | $0.50 |
Troubleshooting
Many directories show blocked or not_permitted
Those sites either closed the page to automated access in robots.txt or answered with a security check. This actor does not get around either, so they were skipped and not charged. They are listed in the recommendations to check by hand.
"Missing required fields"
A live audit needs businessName, streetAddress, city, state, zipCode and phone. A run that stops here charges no task events.
How do I test without spending anything?
Set "demoMode": true, or run with no business details. You get a labeled sample audit and no task events are charged.
Built by John Rippy | Actor Arsenal