Citation Builder avatar

Citation Builder

Pricing

from $50.00 / 1,000 citation auditeds

Go to Apify Store
Citation Builder

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

The Howlers

Maintained by Community

Actor stats

8

Bookmarked

65

Total users

2

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

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 in providedUrls (or facebookUrl, linkedinUrl, instagramUrl).
  • Forms with a CAPTCHA are never submitted. You get captcha_detected plus 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

ParameterTypeDefaultRequiredDescription
modestring"audit"Noaudit = 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.
businessNamestring-Yes, for a live auditYour official business name
streetAddressstring-Yes, for a live auditYour business street address
citystring-Yes, for a live auditCity name
statestring-Yes, for a live audit2-letter state code
zipCodestring-Yes, for a live audit5-digit ZIP code
phonestring-Yes, for a live auditPrimary business phone (will be formatted consistently)
websitestring-NoYour business website (optional but recommended)
emailstring-NoContact email address (optional)
descriptionstring-NoBrief description of your business (150-300 characters recommended)
categoriesarray-NoBusiness categories, used for Yext taxonomy mapping and industry directory detection (e.g., 'Plumber', 'HVAC Contractor', 'Dentist', 'Attorney')
industrystring-NoYour 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, instagramUrlstring-NoYour page on that site, read directly as its listing (if its robots.txt allows it)
providedUrlsobject-NoListing URLs you already know, keyed by directory name, read directly instead of searching
verifyAfterSubmitbooleanfalseNoAfter 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'.
dryRunbooleanfalseNoLegacy compatibility: setting this to true maps to mode='audit'. Use the 'mode' field instead.
directoriesarray-NoOnly audit/submit these directories (leave empty for all 45+)
skipDirectoriesarray-NoSkip these directories (e.g., 'BBB' if you're not a member)
maxConcurrentinteger3NoNumber of directories to process at the same time (1 to 5)
dataAxleApiKeystring-Full mode onlyData Axle aggregator submission. Uses /v3/places/claims to create/claim listings that feed YP, SuperPages, DexKnows + 100+ downstream directories.
yextApiKeystring-Full mode onlyYext Knowledge API entity creation. Your categories are auto-mapped to Yext taxonomy IDs.
brightLocalApiKeystring-Full mode onlyBrightLocal Citation Builder campaign. BrightLocal's team handles submissions within 5-7 business days.
anthropicApiKeystring-NoPowers AI analysis: health scoring, correction suggestions, prioritized actions, estimated ranking impact.
firecrawlApiKeystring-NoAI extraction fallback for listing pages that loaded but whose layout the CSS selectors could not read.
enableAiAnalysisbooleantrueNoRun Claude AI analysis on results. Requires anthropicApiKey.
enableCrossValidationbooleantrueNoUse weighted voting across directories to determine your canonical (most likely correct) NAP.
businessesarray-NoBusinesses to audit in sequence. Each object needs: businessName, streetAddress, city, state, zipCode, phone. Optional: website, email, categories, industry.
demoModebooleanfalseNoReturn labeled sample audit results instead of a live audit
webhookUrlstring-NoOptional URL to receive results via POST request when actor completes

Pricing

This actor uses pay-per-event billing:

EventWhen it is chargedPrice
Actor startOnce 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 AuditedNAP checked on one directory (search + extract + compare)$0.05
Citation SubmittedPer directory submission$0.15
Aggregator API PushBusiness 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