Website Social Links Finder: Company Profiles API
Pricing
from $1.20 / 1,000 website profiles
Website Social Links Finder: Company Profiles API
Get the official social media profiles of any company website: LinkedIn page, Facebook, Instagram, X, YouTube, TikTok and more, plus logo, favicon and share image. No personal profiles, no e-mails, one row per site, robots.txt obeyed.
Pricing
from $1.20 / 1,000 website profiles
Rating
0.0
(0)
Developer
Rowcraft
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Find the official social media profiles of a website: the company LinkedIn page, Facebook page, Instagram, X, YouTube, TikTok, Pinterest, GitHub, Telegram and WhatsApp business links that the site itself shows, plus its brand assets: logo, favicon, share image, theme colour and site name. Give the actor a list of domains or page addresses; it reads each site politely and returns one row per website, as JSON, CSV or Excel, with one column per network and a full list of every profile link and where on the page it was found.
Only company profiles are collected. Personal links (LinkedIn member pages, share buttons, mailto, phone and WhatsApp number links) are dropped before anything is saved, so the rows hold no e-mail addresses, phone numbers or names of people.

What you get
One row per website:
- Identity: the domain, the address you gave, the address of the first page read after redirects, the HTTP status, the page title and the declared language
- Ten network columns, each a single profile address or null:
linkedinUrl(company, school or showcase page),facebookUrl,instagramUrl,xUrl(X, formerly Twitter),youtubeUrl,tiktokUrl,pinterestUrl,githubUrl,telegramUrlandwhatsappUrl - Every profile link found:
socialLinks, a list with the network, the address, where it sat on the page (schema,meta,footer,headerorpage) and the page it was found on, so a site with two Instagram accounts gives both - Brand assets:
siteName,organizationName,logoUrl,faviconUrl,appleTouchIconUrl,ogImageUrl(the share image) andthemeColor - Counts:
networks(the networks found, as a short text for filters),socialLinkCountandpagesRead
The run also writes a COVERAGE record with one line per website you asked for (ok, blocked, robots_disallowed, not_found, error, already_delivered or not_checked, with the reason and the extra pages read) and a RUN_SUMMARY with counts: how many websites showed profile links, how many showed none, and how many sites carry each network.
Why this actor
- Company profiles only. The rules drop LinkedIn member pages, share and intent buttons, YouTube
/user/links and every link that carries a phone number, so the result is a list of organisation accounts, not a contact list. - Brand assets in the same row. The logo, favicon, share image, theme colour and site name come from the same page read, so a CRM, a directory or a mock-up gets the profile links and the visual identity in one step.
- Reads where the links really are. Footer and header links, the
sameAslist of the organisation in the page data, thetwitter:siteandarticle:publishertags andrel="me"links all count. When the first page shows fewer than three networks, the actor also reads the contact page and the about page that the first page links to, because many sites keep their profile links there. - The source of every link is shown. Page data and meta tags rank first, then the footer, then the header, then the rest of the page, and the column for each network holds the best-ranked link, while
socialLinkskeeps all of them. - Pay only for websites read. Websites behind an anti-bot page, disallowed by robots.txt, not found, invalid or repeated in your list are never charged. A website that was read and shows no profile link is delivered with empty fields, because that is a true answer.
- No request to any social network. The actor reads the site you give, nothing else. Profiles are never opened, followed or checked.
- Polite by design. robots.txt is read and obeyed first, one request per second by default, no proxies, no CAPTCHA solving.
How to use it
- Open the Actor and paste your domains or page addresses into Websites, one per line. A column copied from a spreadsheet works, and so do entries separated by commas.
- For a first try keep the list short, or set Maximum websites delivered to a small number.
- Leave Also read contact and about pages on the default (when the first page shows few profiles), or choose Always for the most complete result or Never for the fastest one.
- Click Start. The status line shows progress; the run stops cleanly at your maximum or at the charge limit you set in the run options.
- Open the Dataset tab: the Overview, All networks and Brand assets views show the main columns. Download JSON, CSV, Excel, XML or HTML, or send the rows to Google Sheets, Slack, Make, n8n or Zapier with the Integrations tab.
- Open the
COVERAGErecord in the key-value store to see which websites could not be read and why. - To keep a list of sites up to date, run it on a schedule with Only new rows since the last run turned on: a website is delivered, and charged, only the first time.
Input
| Field | What it does |
|---|---|
websites | Domains (example.com) or page addresses (https://example.com/contact), one per line. A bare domain means its home page; an address means that page. One row per website, up to 100,000 per run. |
extraPages | whenFew (default): read up to two more pages of the same website, a contact page and an about page that the first page links to, when the first page shows fewer than three networks. always: read them for every website. never: read the first page only. |
maxItems | Stop after this many delivered rows. 0 = the whole list. |
onlyNew, stateName | Deliver a website only the first time, then skip it in later runs with the same state name |
notifyUrl, notifyWhenEmpty | A webhook that receives one message when the run ends; see Automation below |
requestIntervalMs | Pause between requests, default 1000 ms, minimum 250 ms |
Example: three websites, one row each.
{"websites": ["wordpress.org", "blender.org", "arduino.cc"]}
Example: a list of company sites, contact and about pages always read, with a Slack message when the run ends.
{"websites": ["company-one.com", "company-two.com", "https://company-three.com/contact"],"extraPages": "always","notifyUrl": "https://hooks.slack.com/services/..."}
Output
29 fields per row. Empty values are null, never missing, so CSV and Excel columns are stable.
| Field | Type | Example |
|---|---|---|
id | string | wordpress.org |
domain | string | wordpress.org |
inputUrl | string | wordpress.org |
url | string | https://wordpress.org/ |
statusCode | integer | 200 |
siteTitle | string | Blog Tool, Publishing Platform, and CMS – WordPress.org |
language | string | en-US |
siteName | string | WordPress.org |
organizationName | string | WordPress |
logoUrl | string | https://s.w.org/style/images/about/WordPress-logotype-wmark.png |
faviconUrl | string | https://s.w.org/images/wmark.png |
appleTouchIconUrl | string | https://s.w.org/images/wmark.png |
ogImageUrl | string | https://wordpress.org/files/2024/04/wordpress-homepage-ogimage-2024… |
themeColor | string | #00979d |
linkedinUrl | string | https://www.linkedin.com/company/wordpress |
facebookUrl | string | https://www.facebook.com/WordPress |
instagramUrl | string | https://www.instagram.com/wordpress/ |
xUrl | string | https://x.com/WordPress |
youtubeUrl | string | https://www.youtube.com/wordpress |
tiktokUrl | string | https://www.tiktok.com/@wordpress |
pinterestUrl | string | https://www.pinterest.com/acmeshop/ |
githubUrl | string | https://github.com/arduino |
telegramUrl | string | https://t.me/acmeshop |
whatsappUrl | string | https://wa.me/message/ABCDEFGHIJKLM |
networks | string | linkedin, facebook, instagram, x, youtube, tiktok |
socialLinkCount | integer | 6 |
socialLinks | array | [{"network": "github", "url": "https://github.com/apify", "source":… |
pagesRead | integer | 1 |
checkedAt | string | 2026-10-19T07:33:19.158Z |
Example rows
Two real rows from a run (long texts shortened here, complete in the dataset):
[{"id": "wordpress.org","domain": "wordpress.org","inputUrl": "wordpress.org","url": "https://wordpress.org/","statusCode": 200,"siteTitle": "Blog Tool, Publishing Platform, and CMS – WordPress.org","language": "en-US","siteName": "WordPress.org","organizationName": "WordPress","logoUrl": "https://s.w.org/style/images/about/WordPress-logotype-wmark.png","faviconUrl": "https://s.w.org/images/wmark.png","appleTouchIconUrl": "https://s.w.org/images/wmark.png","ogImageUrl": "https://wordpress.org/files/2024/04/wordpress-homepage-ogimage-202404.png","themeColor": null,"linkedinUrl": "https://www.linkedin.com/company/wordpress","facebookUrl": "https://www.facebook.com/WordPress","instagramUrl": "https://www.instagram.com/wordpress/","xUrl": "https://x.com/WordPress","youtubeUrl": "https://www.youtube.com/wordpress","tiktokUrl": "https://www.tiktok.com/@wordpress","pinterestUrl": null,"githubUrl": null,"telegramUrl": null,"whatsappUrl": null,"networks": "linkedin, facebook, instagram, x, youtube, tiktok","socialLinkCount": 6,"socialLinks": [{"network": "linkedin","url": "https://www.linkedin.com/company/wordpress","source": "footer","foundOnUrl": "https://wordpress.org/"},{"network": "facebook","url": "https://www.facebook.com/WordPress","source": "schema","foundOnUrl": "https://wordpress.org/"},{"network": "instagram","url": "https://www.instagram.com/wordpress/","source": "footer","foundOnUrl": "https://wordpress.org/"},"… 3 more"],"pagesRead": 1,"checkedAt": "2026-10-19T07:51:56.942Z"},{"id": "arduino.cc","domain": "arduino.cc","inputUrl": "arduino.cc","url": "https://www.arduino.cc/","statusCode": 200,"siteTitle": "Arduino - Home","language": "en","siteName": "Arduino","organizationName": "Arduino","logoUrl": "https://www.arduino.cc/images/logo.jpg","faviconUrl": "https://cdn.arduino.cc/header-footer/prod/assets/favicon-arduino/favicon.ico","appleTouchIconUrl": null,"ogImageUrl": "https://www.datocms-assets.com/150482/1742470244-logo.png","themeColor": "#00979d","linkedinUrl": "https://www.linkedin.com/company/arduino","facebookUrl": "https://www.facebook.com/official.arduino","instagramUrl": "https://www.instagram.com/arduino.cc/","xUrl": "https://x.com/arduino","youtubeUrl": null,"tiktokUrl": null,"pinterestUrl": null,"githubUrl": "https://github.com/arduino","telegramUrl": null,"whatsappUrl": null,"networks": "linkedin, facebook, instagram, x, github","socialLinkCount": 5,"socialLinks": [{"network": "linkedin","url": "https://www.linkedin.com/company/arduino","source": "schema","foundOnUrl": "https://www.arduino.cc/"},{"network": "facebook","url": "https://www.facebook.com/official.arduino","source": "schema","foundOnUrl": "https://www.arduino.cc/"},{"network": "instagram","url": "https://www.instagram.com/arduino.cc/","source": "schema","foundOnUrl": "https://www.arduino.cc/"},"… 2 more"],"pagesRead": 1,"checkedAt": "2026-10-19T07:52:06.473Z"}]
Results can be downloaded as JSON, CSV, Excel, XML or HTML from the Dataset tab, or read through the Apify API.

How the profile links are chosen
The actor looks at every link of the page and keeps a link only when it is the profile of an account on one of the ten networks. The shapes it accepts and the shapes it drops:
| Network | Kept | Dropped |
|---|---|---|
/company/, /school/ and /showcase/ pages | /in/ and /pub/ member pages, share links, feed and sales links | |
a page by name, profile.php?id= and /pages/Name/ID addresses, a page's about tab | /people/ pages, posts, photos, events, groups, share, dialog and plugin links | |
instagram.com/name | posts, reels, stories, explore and tag pages | |
| X | x.com/name and twitter.com/name, follow buttons (intent/follow?screen_name=) | tweets, lists, share and tweet buttons, home?status= links |
| YouTube | @handle, /channel/, /c/ and plain channel names | /user/ links, videos, playlists, embeds, shorts, youtu.be links |
| TikTok | tiktok.com/@name | video links |
pinterest.com/name (any country domain) | pins, search and the pin-it button | |
| GitHub | github.com/name and github.com/orgs/name | repositories and product pages |
| Telegram | t.me/name, the web preview of a channel, + and joinchat invites | share links, stickers, bot and proxy links |
wa.me/message/… and wa.me/qr/… business links, channels and group invites | every link that contains a phone number: wa.me/<number>, wa.me/c/<number>, api.whatsapp.com/send?phone= |
The shortened fb.me and instagr.am addresses are read as Facebook and Instagram. Links to other networks, to Wikipedia, to rating sites and to the site's own pages are ignored.
Where on the page a link sits matters, because team pages, author boxes and partner lists link to accounts that are not the organisation's:
- Always used: links in the footer and the header, the
sameAslist of the organization in the page data, thetwitter:siteandarticle:publishertags andrel="me"links. - Body of the first page: used only when the page shows fewer than three accounts of that network. Three or more different accounts of one network in the body text are taken for a team, partner or directory list and left out.
- Contact and about pages: only the footer, the header, the page data and the meta tags are used, never the body text, because those pages often list team members with their own accounts.
Brand assets, where each one comes from
siteName: theog:site_nametag, else the name of the organization in the page data, else the name of the website there, else theapplication-nametag.organizationNameis the organization name in the page data alone.logoUrl: the logo in the organization's page data, else theog:logotag, else the first image whose class, id, alt text or file name says "logo" in the page header (partner, client and sponsor logo strips are skipped). A logo drawn inline as SVG code has no address, so the column is null.faviconUrl: the largest icon the page declares withrel="icon";appleTouchIconUrlis the largestapple-touch-icon. Nothing is guessed: a site that declares no icon gets null.ogImageUrl: theog:imagetag, elsetwitter:image.themeColor: thetheme-colortag.
Pricing
Pay per result. You pay for each website read and delivered to your dataset, nothing else: no subscription, no minimum, no charge for websites that could not be read (anti-bot page, robots.txt, not found, errors), for invalid or repeated entries, or for websites skipped by Only new rows because they were delivered before. A website that was read and shows no profile link is delivered, with null columns, and counted as one result.
| Your Apify plan | Price per 1,000 rows | Price per row |
|---|---|---|
| Free plan | $1.80 | $0.0018 |
| Starter plan | $1.55 | $0.00155 |
| Scale plan | $1.40 | $0.0014 |
| Business plan and above | $1.20 | $0.0012 |
Example: 1,000 websites cost $1.80 on the Free plan and $1.20 on the Business plan. Platform usage of the run (compute and storage) is included in that price and is not billed to you separately; the actor runs in 256 MB and spends most of its time waiting between requests.
A start event of $0.00005 is charged once per run (Apify default).
Cap your spend: set Maximum total charge in the run options. The actor stops cleanly when the cap is reached and you keep everything delivered until then. The run summary (RUN_SUMMARY in the key-value store) says why a run stopped.
Automation: only new rows, notifications, schedules
Only new rows since the last run. Turn on onlyNew and the actor remembers every website it delivered to you (in a key-value store named rowcraft-website-social-links-finder-state in your Apify account). The next run with the same stateName skips those websites before reading them, so you pay only for websites that are new in your list. The first run delivers every website it can read. Use a different stateName for each list so they keep separate memories. Because a website is delivered only once, delete the state record, or use a new stateName, when you want to read the same websites again.
Notification when the run ends. Put a webhook address in notifyUrl and the actor sends one JSON POST with the number of delivered rows, links to the dataset (JSON and CSV) and the run. It works with Slack and Discord incoming webhooks (the message is in text and content), with Make, n8n and Zapier catch hooks, and with your own endpoint. By default it is sent only when at least one row was delivered; notifyWhenEmpty sends it every time.
Schedules. Create a schedule in Apify Console (daily, weekly, monthly or cron) with onlyNew on and a list that grows, and each run enriches only the new websites.
Integrations. Send the results to Make, n8n, Zapier, Google Sheets, Slack, Google Drive, Airtable or any webhook from the Integrations tab of the Actor, with no code.
API, SDKs and AI agents. Every run is available through the Apify API and the official JavaScript and Python clients; the Actor can also be called by AI agents through the Apify MCP server. The example input in the API tab is a working call.
Use cases
- CRM and lead-list enrichment: add the company LinkedIn, Facebook and Instagram pages to a list of company domains, then use them for account research, ad audiences or outreach planning.
- Business directories and marketplaces: fill the profile, logo and social links of listed companies from their own sites instead of asking each company to type them in.
- Brand and competitor monitoring: keep the official accounts of a set of brands in one table, with the logo and theme colour next to them.
- Social listening setup: build the list of accounts to follow for a market, a customer list or a set of suppliers, from the sites those companies run.
- Media and agency work: collect the logos, share images and profile links of the companies in a report, a pitch or a press list.
- Quality checks: find the websites of a portfolio that show no social profile at all, or that link to a different Facebook page than the one on file.
Ready-made examples, each with the input filled in (open one and press Start, or save it as your own task):
- Social media profiles of open source project websites
- Instagram, Facebook and TikTok pages of online store brands
What this actor does not do
- Collect contacts: no e-mail addresses, phone numbers or names of people, no personal profiles, and no
mailto:,tel:orsms:links. - Visit social networks: it never opens a profile, so it does not check that an account exists, count followers or read posts.
- Crawl a website: at most the page you give plus a contact page and an about page that it links to, and never a guessed address, a sitemap or the whole site.
- Run JavaScript, log in, accept cookie banners, use proxies or solve CAPTCHAs: websites that answer with an anti-bot page are reported as blocked and not charged, and links that a page adds only with JavaScript are not seen.
- Tell a company account from a personal one on networks that use plain names (Instagram, Telegram, GitHub, Facebook): it returns the account that the company's own website links as its profile.
Limits and fair use
- One request per second by default (minimum 250 ms). A website takes two to four requests: robots.txt, the first page and up to two more pages. In our test runs that came to about two to five seconds per website, roughly 1,000 websites an hour.
- What is in the HTML only. The actor reads the page as the server sends it, without running JavaScript. A footer that a script adds after the page loads is not seen, and such a site comes back as a row with empty network columns.
- Anti-bot pages. Websites behind a bot challenge (Cloudflare, Akamai, DataDome and similar) are reported as
blockedand not charged. After 10 blocked websites in a row the run stops and says why in the run summary, because the rest of the list would most likely be blocked too. - robots.txt is obeyed for every address the visit touches, including redirect targets and the contact and about pages. If robots.txt disallows the page you gave, the website is
robots_disallowed; if it disallows only the contact page, that page is skipped and the row is still delivered. If robots.txt answers with a server error the site is not read, as the robots.txt standard (RFC 9309) requires. - Page size: the first 3 MB of a page are read; larger pages are cut there and counted in the run summary.
- Up to 100,000 websites per run. The run stops 90 seconds before its timeout with the summary, the coverage and the Only new rows memory saved; for long lists raise the timeout or split the list.
Data source and licence
The data is what each website sends to every visitor: the HTML of the page you give and, when contact and about pages are read, of those pages. The actor reads each page once, as a browser does on a first visit, after checking robots.txt, and keeps only the addresses of the profile links, the brand asset addresses and a few short texts (page title, site name, language). Page text, images and e-mail or phone details are not stored or delivered. The images themselves are not downloaded: logoUrl, faviconUrl and ogImageUrl are addresses, and the rights to the images stay with the site that owns them.
The page data that the actor reads follows the public schema.org vocabulary (Organization, sameAs, logo) and the Open Graph tags (og:site_name, og:image).
Rowcraft is independent: this actor is not provided, endorsed or authorised by the websites it reads or by the social networks and companies it names. Product names and trademarks belong to their owners and are used only to say which network a link points to.
Privacy: no personal data
Rowcraft actors are built not to collect personal data:
- Only the pages you give, and at most two more pages of the same website, are read; the row holds addresses of company profiles, brand asset addresses, the page title, the site name and the language.
- Links with a person behind them are dropped: LinkedIn member pages, YouTube
/user/pages, WhatsApp links that contain a phone number,mailto:,tel:andsms:links, and share buttons. The data of people named in the page data of a site (founders, contact points, e-mail and phone fields) is never read. - An e-mail address or phone number inside the page title or the site name is removed, and a link that would contain one is left out.
- The actor sends no cookies, fills no forms and never logs in.
You are responsible for using the data in line with the law that applies to you.
Other Rowcraft actors
All Rowcraft actors read official or public sources, deliver flat rows without personal data and support only-new runs and notifications:
- Ashby Jobs Scraper – Job Postings with Salary Ranges — Job postings from Ashby job boards (jobs.ashbyhq.com) by company: title, department, team, locations with country, employment and workplace type, published salary range, full text.
- Broken Link Checker – Find 404s and Dead Links API — Pay per crawled page, not per link: crawl a site within robots.txt and check every link on each page for 404s, 5xx errors, DNS and TLS failures and redirects.
- Bulk Image Downloader API: Save Page Images with Sizes — Download the images of any web pages, or direct image links, into a key-value store with width, height, format, size and a download link per file.
- Career Site Jobs Scraper: Greenhouse, Lever, Ashby, Workday — Job listings from the career pages of the companies you choose on Greenhouse, Lever, Ashby, Workday, Workable, Personio, Recruitee, Teamtailor and Gem, in one run and one format: title, locations, department, salary when published, full text.
- Chrome Web Store Scraper: Users, Ratings & Versions — Reads public Chrome Web Store listing pages with no login, no proxy and no personal data: users, rating, category, version, update date, permissions and company developers.
- Domain Email and DNS Checker API: MX, SPF, DMARC, Providers — Find which email provider, sending services and DNS host each domain uses, from public DNS records only.
- SIRENE France Company Scraper: SIREN, NAF, Revenue, Status — French companies from the official Recherche d'entreprises API (INSEE SIRENE + INPI): SIREN and SIRET, legal form, NAF activity, head-office address, employee band, revenue and net income, labels, creation date and VAT number.
- France Fuel Prices Scraper – Official Open Data by Station — Current fuel prices at every French station, straight from the official open-data feed (Licence Ouverte 2.0): gazole, SP95, SP98, E10, E85 and GPLc, each with its update time.
- Gem Jobs Scraper – Job Board Listings from jobs.gem.com — Job listings from Gem job boards (jobs.gem.com) by company: title, department, offices with country, employment type, remote, hybrid or on-site, requisition ID, publication date and full ad text, from the public Gem Job Board API.
- Google Play Apps Scraper: App Details, Installs, Ratings — Public Google Play app details as flat rows: installs, rating, number of ratings, price, version, last update, minimum Android, ads and in-app purchases.
- Greenhouse Jobs Scraper – Job Listings by Company Board — Job listings from Greenhouse job boards by company: title, departments, offices, publication date, full ad text, published pay ranges.
- Hacker News Scraper API: Top, New, Best, Ask, Show Stories — Read Hacker News stories from the official Firebase API: top, new, best, Ask HN, Show HN and job lists with score, comments, domain and age.
- Himalayas Jobs Scraper: Remote Jobs API with Salaries — Remote jobs from Himalayas through its public jobs API: title, company, salary range, seniority, categories, the countries and time zones open to candidates, full description and job link.
- Image to Text OCR API: Extract Text from Images in Bulk — Read the text in images given by link or found on web pages, with a local OCR engine and no third-party API.
- KRS Poland Companies Scraper: Register Data, PKD, Status — Polish companies from the official KRS register API of the Ministry of Justice: name, KRS, NIP and REGON numbers, legal form, status, address, PKD activity codes, share capital, branches and registration dates.
- LEI Records Scraper: Legal Entity Identifier Lookup API — Legal Entity Identifier (LEI) records from the Global LEI Index, read through the public GLEIF API: legal name, legal form, register number, addresses, status, renewal date and parent companies.
- Lever Jobs Scraper – Job Postings from jobs.lever.co — Job postings from Lever career pages (jobs.lever.co) by company: title, team, department, location, commitment, workplace type, salary range when published, description, requirements and benefits.
- Lighthouse Audit API: Core Web Vitals and Performance Scores — Run Lighthouse on any public page and get Performance, Accessibility, Best Practices and SEO scores, lab Core Web Vitals and the biggest savings.
- Norway Company Register Scraper: Brønnøysund Business Data — Norwegian companies from the Central Coordinating Register for Legal Entities (Brønnøysund, NLOD open data): organisation number, legal form, industry, employees, share capital, addresses, website, VAT and bankruptcy status.
- PDF Text Extractor: Text, Pages and Metadata from PDF Links — Get the text of every PDF you link, page by page, with page count, language and word count.
- Personio Jobs Scraper: Job Listings, Salaries, Departments — Job ads from any company's Personio careers feed: title, department, office, employment type, schedule, seniority, salary when published, keywords and the full description in the language you choose.
- Platsbanken Scraper: Sweden Jobs, Employers, Org Numbers — Every job ad on Platsbanken (Arbetsförmedlingen) from the official JobTech API: headline, employer and organisation number, occupation codes, municipality, coordinates, salary type, deadline and full text.
- Recruitee Jobs Scraper – Job Listings by Company Career Site — Job listings from Recruitee career sites by company: title, department, locations with country, employment type, remote flag, published salary and full text, one request per company.
- Remote Jobs Aggregator API: RemoteOK, WeWorkRemotely, Jobicy — Remote jobs from RemoteOK, We Work Remotely and Jobicy in one clean list, read from their official feeds and APIs, merged without duplicates.
- Robots.txt and AI Crawler Access Checker API — Check which AI and search crawlers a website lets in: GPTBot, ClaudeBot, PerplexityBot, Google-Extended and more, read from robots.txt by the RFC 9309 rules.
- RSS Feed Finder and Reader – Blog and News Article API — Find the RSS, Atom and JSON feeds of any website and read their newest articles, from a domain name alone.
- SEO Audit Tool: Titles, Meta Tags, Headings and Links API — Audit the on-page SEO of any list of pages or websites: titles, meta descriptions, headings, canonicals, indexing, links, images and structured data, with a score and the issues found per page.
- Shopify Products Scraper: Store Catalog Export to JSON, CSV — Products from any Shopify store's public catalog: title, vendor, type, tags, description, variants with price, compare-at price, SKU and stock, images, options, store currency.
- Sitemap URL Extractor: Every Page with Last-Modified Dates — Get every page a site lists in its sitemaps, with last-modified dates, from robots.txt through sitemap indexes and .gz files.
- SSL Certificate and Security Headers Checker API — Check the TLS certificate and the HTTP security headers of every domain in one run, with an A+ to F grade and the exact issues to fix.
- Store Products Scraper – Shopify, WooCommerce, VTEX — Export the product catalogue of any Shopify, WooCommerce or VTEX store from its public catalogue endpoint: title, brand, prices, discounts, stock, categories, images and links, one row per product, the same columns on every platform.
- Structured Data Extractor: JSON-LD, Schema.org, Open Graph — Pull the schema.org JSON-LD, Microdata, RDFa and Open Graph of any page list into flat rows: types, product price, availability, ratings, organization, breadcrumbs, with validation issues.
- Teamtailor Jobs Scraper – Career Site Jobs by Company — Job listings from Teamtailor career sites by company: title, department, role, locations with city and country, remote or hybrid status, publication date and full ad text, from the official job feed.
- TED Tenders Scraper: EU Public Procurement Notices API — EU public procurement notices from TED (Tenders Electronic Daily), the official EU tenders portal, through its public Search API: title, buyer, country, CPV codes, values, deadlines, lots and document links.
- UK Companies House Scraper: Company Search & Profiles API — UK companies from the official Companies House API with your free key: search by name, status, type, SIC code, date or location, or look up company numbers.
- UK Tenders Scraper: Find a Tender + Contracts Finder API — UK public procurement notices from Find a Tender and Contracts Finder, the official UK government portals, through their open OCDS APIs: title, buyer, region, CPV codes, values, deadlines, notice type and links.
- Bulk URL Status and Redirect Chain Checker API — Check the status code, redirect chain, canonical and indexing signals of every URL in a list, with the final destination and a loop flag.
- Video Frame Extractor: Thumbnails and Frames from Video URLs — Extract JPG, PNG or WebP frames from direct video links (MP4, WebM, MOV, MKV, OGV): evenly spaced, every N seconds, at exact times or at scene changes.
- VTEX Products Scraper – Public Catalog Export — Export the catalogue of any VTEX store (Auchan, Chedraui and thousands of retailers in Europe and Latin America) from its public search endpoint: title, brand, EAN, prices, list prices, stock, categories, specifications and images, one row per product.
- Website Intelligence API: Tech, Social, SSL, DNS Profile — One row per domain with the whole website profile: technologies, social profile links, logo and brand assets, SSL expiry, DNS and mail providers, sitemap size, robots.txt and llms.txt.
- Website to Markdown Extractor: Clean Text for LLMs and RAG — Turn a list of web page addresses into clean Markdown and plain text for LLMs and RAG: the main content only, with headings, links, images and tables.
- Website Screenshot API: Full-Page PNG, JPEG and PDF Captures — Capture full-page or viewport screenshots of any public web page as PNG, JPEG or WebP, with an optional A4 PDF.
- Website Tech Stack Detector – Technology Lookup API — Find the technologies behind a list of websites: CMS, e-commerce platform, analytics, tag managers, ad pixels, consent tools, chat, CDN and payments, from one polite home-page request per domain.
- WooCommerce Products Scraper – Store API Export — Export every product of a WooCommerce store through its public Store API: title, SKU, prices and sale prices, stock, categories, tags, attributes, ratings, images and links, one row per product.
- Workable Jobs Scraper: Job Listings from Career Pages — Job listings from any company's Workable career page: title, department, location, remote or on-site, employment type, description, requirements, benefits and salary when published.
- Workday Jobs Scraper – Jobs from myworkdayjobs.com Sites — Job listings from Workday career sites (myworkdayjobs.com) by company: title, locations, country, posting date, time type, requisition ID and the full description.
FAQ
Which networks does it find? LinkedIn (company, school and showcase pages), Facebook, Instagram, X (Twitter), YouTube, TikTok, Pinterest, GitHub, Telegram and WhatsApp business links, each in its own column, and all of them in socialLinks.
Does it visit the social networks? No. It reads the website you give and takes the links from its HTML. It never opens a profile, so the result says what the site links to, not whether the account is active.
Which links are left out? Everything that is not an organisation account: LinkedIn member pages (/in/), posts, photos and events, share and tweet buttons, YouTube /user/ links, mailto:, tel: and sms: links, and WhatsApp links that contain a phone number. The table "How the profile links are chosen" lists the exact shapes.
Why does a profile I can see on the website not appear? The actor reads the HTML of the page, without running JavaScript. A footer or icon bar that a script builds after the page loads is not in that HTML. The profile may also be on a page other than the first page, the contact page and the about page, or sit in the body text of a contact or about page, which is never used: set Also read contact and about pages to Always, or give the address of the page that shows the links as the first page.
Why does a row have no profile links at all? The website was read, but its HTML shows none of the accepted profile links: it has no social accounts, links only to share buttons, builds its footer with JavaScript, or sits behind a plain page without links. That is a real answer and is delivered, and charged, as one row. Websites that could not be read are not delivered and not charged.
Why is the result empty? Every website in the list could not be read, or was skipped. The COVERAGE record gives the reason per website: an anti-bot page (blocked), robots.txt (robots_disallowed), no website at that address (not_found), an invalid entry or a connection problem (error), or a website delivered in an earlier run with Only new rows on (already_delivered). Nothing is charged for those, apart from the start event.
Is it legal? The actor reads the public pages of a website the way a visitor does, obeys robots.txt and collects company profile addresses, not personal data or page content. Whether and how you may use the results (for example for marketing or outreach) depends on the law that applies to you.
Does it collect personal data? No personal data: no e-mail addresses, phone numbers, people's names or personal profile links. See the Privacy section.
Do I pay for websites that block the actor? No. Blocked, robots-disallowed, not found and invalid entries are never charged, and neither are duplicates in your list or websites skipped by Only new rows.
What if a site links two Facebook pages or two Instagram accounts? The column holds the best-ranked link (page data and meta tags first, then the footer, the header and the rest of the page, in reading order), and socialLinks lists both with their source, so you can choose.
Can I give full URLs instead of domains? Yes. A domain means its home page; a full address means that page is read first, for example a /contact or /about page that you know shows the links. The row is identified by the domain, so two addresses on the same domain count as one website.
Does it return the e-mail address or phone number of the company? No, on purpose. Rowcraft actors deliver no contact details.
How does Only new rows work here? The actor remembers the domain of each website delivered to you. The next run with the same state name skips those websites before reading them, so a growing list costs only its new entries.
Support and reviews
Problems, missing fields, questions: open an issue on the Issues tab of this Actor. We answer within one working day and fix confirmed bugs in the next release; the changelog lists every change.
If this Actor saved you time, a short review on its page helps other users find it and helps us keep improving it.