Citation Builder avatar

Citation Builder

Pricing

from $0.01 / 1,000 results

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 $0.01 / 1,000 results

Rating

0.0

(0)

Developer

The Howlers

The Howlers

Maintained by Community

Actor stats

5

Bookmarked

38

Total users

6

Monthly active users

7 days ago

Last modified

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

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-NoYour official business name (must match exactly across all citations)
streetAddressstring-NoYour business street address
citystring-NoCity name
statestring-No2-letter state code
zipCodestring-No5-digit ZIP code
phonestring-NoPrimary 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 — 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.
facebookUrlstring-NoYour Facebook business page URL
linkedinUrlstring-NoYour LinkedIn company page URL
twitterUrlstring-NoYour Twitter/X profile URL
instagramUrlstring-NoYour Instagram profile URL
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 simultaneously
dataAxleApiKeystring-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.
yextApiKeystring-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.
brightLocalApiKeystring-Yes*For BrightLocal Citation Builder campaign (full mode only). Creates a managed campaign — BrightLocal's team handles submissions within 5-7 business days.
anthropicApiKeystring-Yes*Powers AI analysis: health scoring, correction suggestions, prioritized actions, estimated ranking impact. Uses Claude Sonnet for intelligent citation recommendations.
firecrawlApiKeystring-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.
captchaSolverProviderstring-NoWhich CAPTCHA solving service to use. All three support reCAPTCHA v2/v3, hCaptcha, and Turnstile. CapSolver also supports image CAPTCHAs. Requires captchaSolverApiKey.
captchaSolverApiKeystring-Yes*API key for your chosen CAPTCHA solver (CapSolver, 2Captcha, or Anti-Captcha). Without this, CAPTCHAs are screenshotted for manual completion.
enableAiAnalysisbooleantrueNoRun Claude AI analysis on results for health scoring, correction suggestions, and impact estimates. Requires anthropicApiKey.
enableCrossValidationbooleantrueNoUse weighted voting across directories to determine your canonical (most likely correct) NAP. Detects name/address/phone variations.
googlePlaceIdstring-NoYour GBP Place ID. If provided, GBP is treated as source of truth (always correct) and all other citations are compared against it.
businessesarray-NoArray of businesses to audit in sequence. Each object needs: businessName, streetAddress, city, state, zipCode, phone. Optional: website, email, categories, industry.
demoModebooleantrueNoRun in demo mode without real credentials. Returns sample v2 audit results for testing.
webhookUrlstring-NoOptional URL to receive results via POST request when actor completes
proxyobject-NoProxy settings for web requests

*Required when Demo Mode is off.


Pricing

This actor uses pay-per-event billing:

EventDescriptionPrice
Citation AuditedNAP checked on one directory (search + extract + compare)$0.05
Citation SubmittedForm auto-filled and submitted to a free directory$0.25
Aggregator API PushBusiness 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