Agency Vista Scraper avatar

Agency Vista Scraper

Pricing

from $4.00 / 1,000 agency profile saveds

Go to Apify Store
Agency Vista Scraper

Agency Vista Scraper

Extract structured marketing agency profiles from Agency Vista — name, services, industries, location, ratings, team size, social links, badges, clients, and verification status. 47K+ agencies. Pay only for valid records ($0.005 each). No login required, no API key, JSON or CSV output.

Pricing

from $4.00 / 1,000 agency profile saveds

Rating

0.0

(0)

Developer

Alex Lowe

Alex Lowe

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Categories

Share

Extract agency profiles, services, locations, ratings, industries, social links, and badges from Agency Vista.

What does Agency Vista Scraper do?

Visits Agency Vista's public agency directory and returns clean, structured records you can drop into a CRM, sales tool, BI dashboard, or recruiting workflow. With detail enrichment enabled (the default), each result includes the full agency name, slug, full description, website, services array, industries array, client list, location, team size, rating, social links, badges, and verification status.

Why use it?

Agency Vista has no public API. This Actor is the fastest path to clean agency-directory data for outbound, partnerships, recruiting, and competitive intelligence.

Example use cases

  • Martech sales teams building outbound lists of digital agencies.
  • White-label SaaS vendors looking for agency partners.
  • Recruiters sourcing marketing firms by service or location.
  • Competitive intelligence teams tracking agency positioning.
  • Freelancers researching agencies by niche.

How does it work?

Agency Vista is a Next.js application that embeds full agency data as JSON in two page types:

  1. Search/list pages (e.g. /agency/all/all) embed up to 50 list-stub agencies with id, name, slug, description preview, city, social profiles, badges, and rating.
  2. Detail pages (/agency/{slug}/summary) embed a single rich agency object with services breakdown, industry focus, full client list, full description, verification, and more.

By default, the Actor follows the list → detail flow: visit a list URL, then for each list-stub fetch its /summary detail page and merge the two into the final record. Set includeProfileDetails: false for the cheaper list-only mode.

You can drive the scrape three ways:

  1. Default: defaults to /agency/all/all (Agency Vista's public top-50 list) and enriches each profile.
  2. Filter axes: supply searchTerms, services, locations, industries — these stamp searchContext metadata on each record. Note: Agency Vista's public SSR doesn't actually filter by service/search-term/industry via URL, so these axes are metadata-only. locations slightly varies the URL path; searchTerms/services/industries do not. To extract more than 50 distinct agencies, supply startUrls.
  3. Direct startUrls: paste specific Agency Vista URLs:
    • List URLs (e.g. https://agencyvista.com/agency/all/all) — yields up to 50 stubs.
    • Detail URLs (e.g. https://agencyvista.com/agency/aj-marketing/marketing-agency-singapore-sg/summary) — single record. Pair with the Agency Vista sitemap (47K+ URLs) to enumerate the full directory.

Input

{
"startUrls": [],
"searchTerms": [],
"services": [],
"locations": ["United States"],
"industries": [],
"minRating": 0,
"includeProfileDetails": true,
"includeSocialLinks": true,
"includeContactFields": true,
"maxItems": 1000,
"maxConcurrency": 3,
"proxyConfiguration": { "useApifyProxy": true },
"debugMode": false
}

Output (one item per agency)

{
"recordId": "agency_vista_38595",
"source": "agency_vista",
"sourceUrl": "https://agencyvista.com/agency/all/all",
"profileUrl": "https://agencyvista.com/agency/page-1-media/marketing-agency-boca-raton-florida-us",
"agencyName": "Page 1 Media",
"description": "The team at Page 1 Media come from the Automotive, Law, E-commerce, Beauty...",
"website": "https://page1.media/",
"email": null,
"phone": null,
"location": { "raw": "Boca Raton, Florida, US", "city": "Boca Raton", "region": "Florida", "country": "US" },
"services": ["Search Engine Optimization", "Reputation Management", "Growth Strategies"],
"industries": ["Accounting", "Real Estate", "Health, Wellness & Fitness"],
"teamSize": { "raw": "5", "min": 5, "max": 5 },
"rating": { "value": 5, "count": 41 },
"socialLinks": { "linkedin": null, "facebook": null, "instagram": null, "twitter": null },
"badges": [],
"clients": ["Your Choice Caregivers", "Other Client Inc."],
"verified": true,
"claimed": true,
"searchContext": { "sourceUrl": "https://agencyvista.com/agency/all/all" },
"scrapedAt": "2026-04-29T00:00:00.000Z"
}

Sample output

A real 25-record sample run is pinned for reference (agency-vista-sample-2026-04-30):

Run input: {"searchTerms":["seo"],"locations":["United States"],"maxItems":25,"maxConcurrency":2}. Every record has populated teamSize, services, industries, rating, and verified: true.

Pricing

$0.005 per agency result. You only pay for valid records actually written to the dataset; duplicates and validation failures are free.

Limits and notes

  • A single Agency Vista list URL returns up to 50 list-stubs. To extract more than 50 distinct agencies, supply startUrls populated from the Agency Vista sitemap (~47K profile URLs).
  • Email addresses and phone numbers are not exposed by Agency Vista's public payload. The corresponding fields are returned as null.
  • Detail enrichment makes a second HTTP request per profile. Set includeProfileDetails: false for fast list-only extraction (no services/industries/clients).
  • This Actor only scrapes publicly available data. It does not bypass authentication or scrape login-gated content.

FAQ

Why does my run only return ~50 results when I have maxItems: 1000? A single list URL returns at most 50 stubs. Supply additional startUrls (e.g. profile URLs from the sitemap) to extract more.

Why does the result count drop slightly when includeProfileDetails: true? A small fraction of detail pages return unexpected shapes (e.g. unclaimed/disabled agencies). The Actor degrades gracefully — those records are skipped, never written with corrupt data.

Are there filters I can apply per record? minRating is enforced at extraction time using the list-stub's reviewsScore. Other filters happen post-hoc on the dataset.

Support

Issues, feature requests, or buyer questions: open a support ticket in the Apify Console.

Changelog

  • 0.1.5 — Fix: teamSize was null for every record because the list-page JSON shape changed to {total: N} and the spread-merge clobbered it with the detail page's empty employees array. Both code paths handled now.
  • 0.1.3 — Tighter run defaults (1024MB / 1h timeout) and includeContactFields defaults to false (always null in v1).
  • 0.1 — Initial release. Two-stage __NEXT_DATA__ extraction (list → detail). Detail enrichment is on by default. Sitemap-based full-directory crawl supported via startUrls.