Site Analysis API
v1.1.0One JSON request — and you get 80+ SEO and technical metrics for any domain. SSL, indexing, speed, meta tags, traffic, links.
Quick start
curl -s "https://pr-cy.io/api/v1.1.0/analysis/base/example.com?key=YOUR_KEY&excludeHistory=1&tests=ssl,httpStatusCode,robotsTxt,sitemap,pageSpeedMobile"
GET/analysis/status/base
"updated": "2026-05-04"
1
Check status
Make a status request — it shows when the site was last analyzed. This call is free.
GET/analysis/base
✓ fresh
— 1 credit
2
Fetch the report
If the response field updated (last analysis date) is under 30 days old — fetch the report. Costs 1 credit.
POST/analysis/update/base
⟳ 1–5 min
— 5 credits
3
Refresh & fetch
If the analysis is outdated — request a refresh for 5 credits. Wait 1–5 minutes, then fetch the fresh report.
Playground
ssl, httpStatusCode, robotsTxt...
excludeHistory
Strip history fields from the response
Basic
Advanced
GET
Basic analysis
/api/v1.1.0/analysis/base/%DOMAIN%
GET
Basic analysis status
/api/v1.1.0/analysis/status/base/%DOMAIN%
POST
Refresh basic analysis
/api/v1.1.0/analysis/update/base/%DOMAIN%
JSON
Tests
No data yet. Send a request.
Tests catalog
Test | Response fields | Description |
|---|---|---|
adultContentSEO | adultContentfalse | trueadultWordsnull | (found words) | Adult words on page |
analysisBotDisallowedIndexing | isDisallowedbool | The website is closed for indexing (for PR-CY BOT) |
avgVisitDurationTraffic | avgVisitDurationnumber | Average visit duration (sec) |
bounceRateTraffic | bounceRatenumber | Bounce rate (%) |
categoryMisc | categoryTopNamestring | Website category |
competitorsTraffic | competitorsarray: [{domain: string, visitsTotalCount: number, themeAffinity: number, affinity: number}] | Competitor websites |
countryRankTraffic | countryCodeCode countrycountryRanknumber | Site ranking by country traffic |
facebookSocialSocial | coverSourcestring (url)groupNamestringlikesnumberlinkstring (url)picturestring (url) | Facebook page info |
faviconTechnical | faviconSrcstring (url) | Favicon |
globalRankTraffic | globalRanknumber | Global site ranking by traffic |
googleIndexIndexing | googleIndexnumber | Google indexed pages (site:) |
googleTransparencyReportIndexing | googleTransparencyReportStatussuccess | fail | Google Safe Browsing — safety check |
httpStatusCodeTechnical | allStatusCodesarray redirectsfinalStatusCodenumber (final code)isCyclicRedirecttrue | false | Final HTTP status and redirect chain |
indexingIndexing | isFinalStatusCodeGoodtrue | falsestatusCodenumberxRobotsTagHeaderstring | nullxRobotsTagHeaderDisallowedBotsarray | nullmetaDisallowedBotsarrayrobotsFileDisallowedSearchBotsarrayisRedirectedMetaRefreshtrue | false | Website indexing status |
interestsTraffic | interestedTopicsarrayinterestedCategoriesarrayinterestedWebsitesarray | Audience interests |
ipTechnical | ipstring | Domain IP |
ipCountryTechnical | ipCountryCodestring (code) | IP country |
ipIspTechnical | ipIspNameISP NameipOrganizationNameOrganization Name | Hosting ISP |
isDataFromGaTraffic | isDataFromGatrue | false | Data sourced from Google Analytics |
reportBacklinksLinks | reportBacklinksTotalnumberreportBacklinksarray: [{sourceUrl: string, sourceDr: number, url: string, anchor: string, createdAt: date, updatedAt: date}] | External backlinks |
reportConcsLinks | reportConcsarray: [{name: string, cnt: number, it50: number, vis: number, perc: number}] | Organic competitors |
reportKeysLinks | reportKeysarray | Organic keywords |
reportLinksLinks | reportIncomingLinksnumberreportOutgoingLinksnumberreportReferringDomainsnumberreportOutgoingDomainsnumberreportLinksByIpnumber | Links summary |
reportPagesLinks | reportPagesarray | Top pages by organic traffic |
reportSummaryLinks | reportIt1numberreportIt3numberreportIt5numberreportIt10numberreportIt50numberreportVisnumber | Organic search summary |
llmsTxtSEO | llmsFileExiststrue | false | llms.txt file presence |
loadTimeTechnical | connectionTimeouttrue | falseloadTimenumber (sec)percentnumber (Better than) | Page load time |
mainPageDescriptionSEO | descriptionstringdescriptionIsGoodtrue | falsedescriptionLengthnumber | Home page meta description |
mainPageEncodingTechnical | encodingstring | Website encoding |
mainPageExternalLinksSEO | externalCountnumberexternalIndexCountnumber | External links on home page |
mainPageHeadersSEO | headersarray: [text, type: (h1-h5)]headersAreGoodtrue | falseheadersCountarray | H1–H5 headers on home page |
mainPageInternalLinksSEO | internalCountnumberinternalIndexCountnumber | Internal links on home page |
mainPagePageSizeTechnical | pageSizenumber | Home page size (KB) |
mainPageSicknessSEO | sicknessnumber | Text spam score on home page |
mainPageTechsTechnical | browserTechsarray | Technologies used on home page |
mainPageTextLengthSEO | textLengthnumber | Home page text length |
mainPageTitleSEO | titlestringtitleIsGoodtrue | falsetitleLengthnumber | Home page meta title |
mainPageWordsCountSEO | wordsCountnumber | Home page word count |
microdataOpenGraphSEO | ogDescriptionstringogFoundtrue | falseogImagestringogTitlestring | Open Graph microdata |
microdataSchemaOrgSEO | microdataSchemaOrgExiststrue | false | Schema.org microdata |
page404BackLinkTechnical | backLinktrue | false | Backlink to home from 404 page |
page404StatusCodeTechnical | statusCodenumber | 404 page HTTP status code |
pageSpeedDesktopSpeed | cumulativeLayoutShift{category: string | null, value: number | null}firstContentfulPaint{category: string | null, value: number | null}interactionToNextPaint{category: string | null, value: number | null}largestContentfulPaint{category: string | null, value: number | null}pageSpeed{score: number, value: number}timeToFirstByte{category: string | null, value: number | null} | Google PageSpeed (desktop) |
pageSpeedMinifyResourcesSpeed | pageSpeedMinifyResources{css: 'true | false', js: 'true | false'} | CSS/JS minification (PageSpeed) |
pageSpeedMobileSpeed | cumulativeLayoutShift{category: string | null, value: number | null}firstContentfulPaint{category: string | null, value: number | null}interactionToNextPaint{category: string | null, value: number | null}largestContentfulPaint{category: string | null, value: number | null}pageSpeed{score: number, value: number}timeToFirstByte{category: string | null, value: number | null} | Google PageSpeed (mobile) |
pageSpeedUnusedCssRulesSpeed | pageSpeedUnusedCssRulestrue | false | Unused CSS rules (PageSpeed) |
pagesPerVisitTraffic | pagesPerVisitnumber | Pages per visit (traffic) |
prcyRankLinks | prcyGradenumberprcyRankLinksFactorstringprcyRankTotalnumberprcyRankTrafficFactorstringprcyRankTrustFactorstring | PR-CY Rank (high / medium / low) |
publicStatisticsTraffic | publicStatisticsAlexaVisitsnumberpublicStatisticsAlexaVisitsMonthlynumberpublicStatisticsLiveInternetVisitsnumberpublicStatisticsLiveInternetVisitsMonthlynumberpublicStatisticsMetrikaVisitsnumberpublicStatisticsMetrikaVisitsMonthlynumberpublicStatisticsPageViewsDailynumberpublicStatisticsPageViewsMonthlynumberpublicStatisticsPageViewsWeeklynumberpublicStatisticsPrcyDatedatepublicStatisticsPrcyVisitsnumberpublicStatisticsPrcyVisitsMonthlynumberpublicStatisticsSourceLinkstringpublicStatisticsSourceTypestringpublicStatisticsVisitsDailynumberpublicStatisticsVisitsMonthlynumberpublicStatisticsVisitsWeeklynumber | Traffic summary (deprecated) |
publicStatisticsLiveInternetTraffic | publicStatisticsLiveInternetVisitsMonthlyHistory{ days: array, weeks: array, months: object } | LiveInternet traffic statistics |
publicStatisticsMetrikaTraffic | publicStatisticsMetrikaVisitsMonthlynumber | Yandex Metrika traffic statistics |
publicStatisticsPrcyTraffic | publicStatisticsPrcyVisitsDailynumberpublicStatisticsPrcyVisitsWeeklynumberpublicStatisticsPrcyPageViewsDailynumberpublicStatisticsPrcyPageViewsWeeklynumberpublicStatisticsPrcyPageViewsMonthlynumberpublicStatisticsPrcyVisitsnumberpublicStatisticsPrcyVisitsMonthlynumberpublicStatisticsPrcyDatedatepublicStatisticsPrcyVisitsHistory{ days: object, weeks: object, months: object }publicStatisticsPrcyVisitsMonthlyHistory{ days: array, weeks: array, months: object } | PR-CY traffic estimate |
robotsTxtTechnical | robotsFileExiststrue | falserobotsFileHashstringrobotsFileMainPageDisallowedRobotsarray[] | robots.txt |
roskomnadzorIndexing | roskomnadzorDomainForbiddentrue | falseroskomnadzorIpForbiddentrue | false | Roskomnadzor (Russian regulator) ban check |
sameCountersLinks | sameCountersActualFoundnumbersameCountersTotalFoundnumbersameCountersWithDomains{} | Domains with the same analytics counters |
sameIpsTechnical | sameIpsTotalFoundnumbersameIpsWithDomains{ip: {dateFound: {}, dateLost: {}, linkedDomains: Array}} | Domains on the same IP |
screenshotDesktopMisc | srcstring | Desktop screenshot |
screenshotSmartphoneMisc | srcstring | Mobile screenshot |
semRushDlinksDiffLinks | semRushDlinksDiffnumber | null | Backlinks count change (%) |
similarWebRankTraffic | similarWebGlobalRanknumbersimilarWebCountryCodestringsimilarWebCountryRanknumber | SimilarWeb rank |
sitemapTechnical | sitemapUrlstring | Website sitemap |
sslTechnical | certValidTodatesslAccesstrue | false | SSL certificate |
statisticsSystemsTraffic | statisticsSystemsarray | Analytics systems on the site |
telegramChannelsSocial | telegramChannelsarray: [{name: string, title: string, smallPhoto: string, participantsCount: number, participantsCountDiff: number}] | Telegram channels |
trafficGeographyTraffic | topCountryGeographyarray: [{countryCode: string, percent: number}] | Traffic geography by country |
trafficSourcesTraffic | trafficSourcesDirectnumbertrafficSourcesMailnumbertrafficSourcesReferralnumbertrafficSourcesSocialnumbertrafficSourcesOrganicSearchnumbertrafficSourcesPaidSearchnumbertrafficSourcesAdsnumber | Traffic sources |
twitterSocialSocial | followersnumberfollowingnumberlinkstringprofileDescriptionstringprofileImageUrlstringprofileNamestringtweetsnumber | Twitter account info |
vkontakteSocialSocial | groupCitystringgroupCounters[market_services: number, articles: number, narratives: number]groupCountrystringgroupDescriptionstringgroupMembersCountnumbergroupNamestringgroupPhotostringgroupPhotoBigstringgroupPhotoMediumstringgroupStatusstringgroupTypestringgroupVerifiednumberlinkstring | VKontakte community info |
whoisCreationDateWhois | whoisCreationDatedate | Domain creation date (whois) |
whoisExpirationDateWhois | whoisExpirationDatedate | Domain expiration date (whois) |
wwwRedirectTechnical | wwwRedirecttrue | false | Redirect www → no www |
yandexAchievementsMisc | yandexAchievementsOfficialtrue | falseyandexAchievementsMarketRatingnumberyandexAchievementsHttpstrue | falseyandexAchievementsTurbotrue | false | Yandex Business achievements |
yandexIndexIndexing | yandexIndexnumber | Yandex indexed pages |
yandexReviewsSocial | countnumber | Yandex review count |
yandexSafeBrowsingIndexing | yandexSafeBrowsingtrue | false | Yandex — virus safety check |
yandexSqiMisc | yandexSqinumber | Yandex SQI |
Use cases
Most common use cases for this API:
- White-label analysis. Full site report styled and hosted under your brand.
- Client audits. Pull raw data, add your own commentary — deliver as PDF or document.
- Bulk monitoring. Roll-ups across a list of sites, value history, alerting on your side.
- Bots & widgets. Telegram bots, embeddable widgets, dashboards, task-specific reports.
PHP example script — prints a few tests from the analysis.
🍪 By using this website, you agree to the processing of cookies and collection of technical data to improve website performance in accordance with our privacy policy.