Gathers what public records, the web archive and search results say about a site you don't know, each with its source.
Uses
Claude
Google Sheets
RDAP
Serper
Wayback Machine
Look up an unfamiliar website before you deal with it
siteUrl to blank.Set siteUrl to blank.spreadsheetUrl to blank.Set spreadsheetUrl to blank.tabName to blank.Set tabName to blank.siteUrl split by :// split by / lowercase and save it as host.Make the first item of the last item of siteUrl split by :// split by / lowercase and save it as host.host doesn't contain .If host doesn't contain .Yes
No
No steps
checkedOn.Get today's date and save it as checkedOn.ownDomain to host.Set ownDomain to host.rows to an empty list.Set rows to an empty list.registrationFinding to The public domain registry did not answer, so nothing about this domain's registration is reported here..Set registrationFinding to The public domain registry did not answer, so nothing about this domain's registration is reported here..registrationSource to Public domain registry (RDAP) lookup for host.Set registrationSource to Public domain registry (RDAP) lookup for host.registryRecord to nothing.Set registryRecord to nothing.registryErrorIf a step below fails, save the error as registryErrorTry
siteUrl. Save it as registryRecord.Look up domain siteUrl. Save it as registryRecord.On error
registryError.message.Show in the output: The domain registry lookup did not complete: registryError.message.fieldMissingIf a step below fails, save the error as fieldMissingTry
registryRecord.query_url and save it as registrationSource.Trim registryRecord.query_url and save it as registrationSource.registrationSource is emptyIf registrationSource is emptyYes
registrationSource to Public domain registry (RDAP) lookup for host.Change registrationSource to Public domain registry (RDAP) lookup for host.No
No steps
On error
registrationSource to Public domain registry (RDAP) lookup for host.Change registrationSource to Public domain registry (RDAP) lookup for host.registrationRecord to registryRecord.result.Set registrationRecord to registryRecord.result.registeredOn to not published by the registry.Set registeredOn to not published by the registry.registrarName to not published by the registry.Set registrarName to not published by the registry.registrantName to not published by the registry.Set registrantName to not published by the registry.registrantCountry to not published by the registry.Set registrantCountry to not published by the registry.registryRecord.found is yesIf registryRecord.found is yesYes
fieldMissingIf a step below fails, save the error as fieldMissingTry
registrationRecord.domain and save it as ownDomain.Trim registrationRecord.domain and save it as ownDomain.ownDomain is emptyIf ownDomain is emptyYes
ownDomain to host.Change ownDomain to host.No
No steps
On error
ownDomain to host.Change ownDomain to host.fieldMissingIf a step below fails, save the error as fieldMissingTry
registrationRecord.registration_date and save it as registeredOn.Trim registrationRecord.registration_date and save it as registeredOn.registeredOn is emptyIf registeredOn is emptyYes
registeredOn to not published by the registry.Change registeredOn to not published by the registry.No
No steps
On error
registeredOn to not published by the registry.Change registeredOn to not published by the registry.fieldMissingIf a step below fails, save the error as fieldMissingTry
registrationRecord.registrar and save it as registrarName.Trim registrationRecord.registrar and save it as registrarName.registrarName is emptyIf registrarName is emptyYes
registrarName to not published by the registry.Change registrarName to not published by the registry.No
No steps
On error
registrarName to not published by the registry.Change registrarName to not published by the registry.fieldMissingIf a step below fails, save the error as fieldMissingTry
registrationRecord.registrant and save it as registrantName.Trim registrationRecord.registrant and save it as registrantName.registrantName is emptyIf registrantName is emptyYes
registrantName to not published by the registry.Change registrantName to not published by the registry.No
No steps
On error
registrantName to not published by the registry.Change registrantName to not published by the registry.fieldMissingIf a step below fails, save the error as fieldMissingTry
registrationRecord.registrant_country and save it as registrantCountry.Trim registrationRecord.registrant_country and save it as registrantCountry.registrantCountry is emptyIf registrantCountry is emptyYes
registrantCountry to not published by the registry.Change registrantCountry to not published by the registry.No
No steps
On error
registrantCountry to not published by the registry.Change registrantCountry to not published by the registry.registrationFinding to Registered on registeredOn, through registrar registrarName.Change registrationFinding to Registered on registeredOn, through registrar registrarName.registrationFinding to registrationFinding Registrant as published: registrantName. Registrant country: registrantCountry.Change registrationFinding to registrationFinding Registrant as published: registrantName. Registrant country: registrantCountry.registrationFinding to registrationFinding Most registries withhold the registrant's name and address by default, so an absent registrant is the ordinary case.Change registrationFinding to registrationFinding Most registries withhold the registrant's name and address by default, so an absent registrant is the ordinary case.Else if @registryRecord isn't empty
registrationFinding to The registry for this domain ending holds no record of host. That is an absence of a record, and nothing more.Change registrationFinding to The registry for this domain ending holds no record of host. That is an absence of a record, and nothing more.Otherwise
No steps
checkedOn, host, Domain registration record, registrationFinding, registrationSource] to the end of rows and save it as rows.Add [checkedOn, host, Domain registration record, registrationFinding, registrationSource] to the end of rows and save it as rows.archiveFinding to The public web archive did not answer, so nothing about this site's archive history is reported here..Set archiveFinding to The public web archive did not answer, so nothing about this site's archive history is reported here..archiveSource to Internet Archive, https://web.archive.org/web/*/@host.Set archiveSource to Internet Archive, https://web.archive.org/web/*/@host.archiveRecord to nothing.Set archiveRecord to nothing.archiveErrorIf a step below fails, save the error as archiveErrorTry
host. Save it as archiveRecord.Get the capture history of host. Save it as archiveRecord.On error
archiveError.message.Show in the output: The web archive lookup did not complete: archiveError.message.fieldMissingIf a step below fails, save the error as fieldMissingTry
archiveRecord.calendar_url and save it as archiveSource.Trim archiveRecord.calendar_url and save it as archiveSource.archiveSource is emptyIf archiveSource is emptyYes
archiveSource to Internet Archive, https://web.archive.org/web/*/@host.Change archiveSource to Internet Archive, https://web.archive.org/web/*/@host.No
No steps
On error
archiveSource to Internet Archive, https://web.archive.org/web/*/@host.Change archiveSource to Internet Archive, https://web.archive.org/web/*/@host.firstCaptured to not recorded.Set firstCaptured to not recorded.captureCount to archiveRecord.total_captures multiplied by 1.Set captureCount to archiveRecord.total_captures multiplied by 1.archiveRecord.is_archived is yesIf archiveRecord.is_archived is yesYes
fieldMissingIf a step below fails, save the error as fieldMissingTry
archiveRecord.first_captured_at and save it as firstCaptured.Trim archiveRecord.first_captured_at and save it as firstCaptured.firstCaptured is emptyIf firstCaptured is emptyYes
firstCaptured to not recorded.Change firstCaptured to not recorded.No
No steps
On error
firstCaptured to not recorded.Change firstCaptured to not recorded.archiveFinding to First captured by the archive on firstCaptured. The archive holds captureCount captures of this address in total.Change archiveFinding to First captured by the archive on firstCaptured. The archive holds captureCount captures of this address in total.Else if @archiveRecord isn't empty
archiveFinding to The archive holds no capture of host. Nothing has been archived for this address, which is an absence of records and nothing more.Change archiveFinding to The archive holds no capture of host. Nothing has been archived for this address, which is an absence of records and nothing more.Otherwise
No steps
checkedOn, host, First appearance in the public web archive, archiveFinding, archiveSource] to the end of rows and save it as rows.Add [checkedOn, host, First appearance in the public web archive, archiveFinding, archiveSource] to the end of rows and save it as rows.disclosureFinding to The site's own page could not be opened, so nothing it states is reported here..Set disclosureFinding to The site's own page could not be opened, so nothing it states is reported here..disclosureSource to siteUrl.Set disclosureSource to siteUrl.pageText to blank.Set pageText to blank.pageReached to false.Set pageReached to false.fetchErrorIf a step below fails, save the error as fetchErrorTry
siteUrl and save it as response.Fetch siteUrl and save it as response.pageReached to response.ok.Change pageReached to response.ok.response.body and save it as pageText.Trim response.body and save it as pageText.On error
fetchError.message with siteUrl replaced by the address given.Show in the output: Could not open the site's page: fetchError.message with siteUrl replaced by the address given.pagePrompt to You are reading the text of one web page and reporting only what that page states.Set pagePrompt to You are reading the text of one web page and reporting only what that page states.
Rules you must follow:
- Use only the page text below. Do not use anything you know about this company or website from anywhere else.
- Do not judge, rate or grade the business or the website, do not draw any conclusion about it, and do not say whether anyone should deal with it.
- Quote the page word for word. Do not paraphrase and do not tidy up.
- If the page does not state something, write exactly: not stated on this page
Answer with these four lines and nothing else:
Postal address: <quoted from the page, or: not stated on this page>
Phone number: <quoted from the page, or: not stated on this page>
Contact email: <quoted from the page, or: not stated on this page>
Company name or registration details: <quoted from the page, or: not stated on this page>
--- PAGE TEXT BEGINS ---
pageText truncated to 12000 characters
--- PAGE TEXT ENDS ---.statedDetails to blank.Set statedDetails to blank.pageReached is yes and pageText isn't emptyIf pageReached is yes and pageText isn't emptyYes
readingErrorIf a step below fails, save the error as readingErrorTry
pagePrompt. Save it as extraction.Ask Claude: pagePrompt. Save it as extraction.
Maximum response length: 400extraction.response_text and save it as statedDetails.Trim extraction.response_text and save it as statedDetails.On error
readingError.message.Show in the output: Could not read the details off the page: readingError.message.statedDetails and save it as opinionCheck.Match keywords in statedDetails and save it as opinionCheck.opinionCheck.is_match is yesIf opinionCheck.is_match is yesYes
disclosureFinding to The page was read, but what came back went beyond quoting it, so it is not repeated here. Open the page and read it yourself..Change disclosureFinding to The page was read, but what came back went beyond quoting it, so it is not repeated here. Open the page and read it yourself..Else if @statedDetails isn't empty
disclosureFinding to statedDetails.Change disclosureFinding to statedDetails.Otherwise
disclosureFinding to The page was read, but no contact or company details could be quoted from it..Change disclosureFinding to The page was read, but no contact or company details could be quoted from it..No
No steps
checkedOn, host, Contact and company details stated on the site's own page, disclosureFinding, disclosureSource] to the end of rows and save it as rows.Add [checkedOn, host, Contact and company details stated on the site's own page, disclosureFinding, disclosureSource] to the end of rows and save it as rows.mentionFinding to The web search did not run, so nothing about mentions elsewhere is reported here..Set mentionFinding to The web search did not run, so nothing about mentions elsewhere is reported here..mentionSource to Google results for the exact phrase @host.Set mentionSource to Google results for the exact phrase @host.searchRecord to nothing.Set searchRecord to nothing.searchErrorIf a step below fails, save the error as searchErrorTry
searchRecord.Search Google for '@host'. Save it as searchRecord.On error
searchError.message.Show in the output: The web search did not complete: searchError.message.resultLink to blank.Set resultLink to blank.resultHost to blank.Set resultHost to blank.resultTitle to blank.Set resultTitle to blank.mentionLines to an empty list.Set mentionLines to an empty list.searchRecord isn't emptyIf searchRecord isn't emptyYes
searchResult in searchRecord.results:For each searchResult in searchRecord.results:resultLink to blank. Change resultLink to blank.linkMissing If a step below fails, save the error as linkMissingTry
searchResult.link and save it as resultLink.Trim searchResult.link and save it as resultLink.On error
Skipped a search result that carried no link..Show in the output: Skipped a search result that carried no link..resultLink isn't empty and resultLink contains :// If resultLink isn't empty and resultLink contains ://Yes
resultLink split by :// split by / lowercase and save it as resultHost.Make the first item of the last item of resultLink split by :// split by / lowercase and save it as resultHost.resultHost is not ownDomain and resultHost doesn't end with .@ownDomain…If resultHost is not ownDomain and resultHost doesn't end with .@ownDomain…Yes
fieldMissingIf a step below fails, save the error as fieldMissingTry
searchResult.title and save it as resultTitle.Trim searchResult.title and save it as resultTitle.resultTitle is emptyIf resultTitle is emptyYes
resultTitle to (no title given).Change resultTitle to (no title given).No
No steps
On error
resultTitle to (no title given).Change resultTitle to (no title given).resultTitle - resultLink to the end of mentionLines and save it as mentionLines.Add resultTitle - resultLink to the end of mentionLines and save it as mentionLines.No
No steps
No
No steps
No
No steps
mentionCount to the length of mentionLines multiplied by 1.Set mentionCount to the length of mentionLines multiplied by 1.mentionLines with a new line and save it as mentionShown.Join the items from index 0 up to 5 of mentionLines with a new line and save it as mentionShown.mentionCount is greater than 0If mentionCount is greater than 0Yes
mentionFinding to Results on domains other than ownDomain: mentionCount of the top 10. The first of them:Change mentionFinding to Results on domains other than ownDomain: mentionCount of the top 10. The first of them:
.mentionFinding to mentionFinding plus mentionShown.Change mentionFinding to mentionFinding plus mentionShown.Else if @searchRecord isn't empty
mentionFinding to Every top result for @host was on ownDomain itself. No page elsewhere was found in these results - that is nothing found, not something found against the site.Change mentionFinding to Every top result for @host was on ownDomain itself. No page elsewhere was found in these results - that is nothing found, not something found against the site.Otherwise
No steps
checkedOn, host, Mentions on domains other than the site's own, mentionFinding, mentionSource] to the end of rows and save it as rows.Add [checkedOn, host, Mentions on domains other than the site's own, mentionFinding, mentionSource] to the end of rows and save it as rows.reviewFinding to The reviews search did not run, so nothing is reported here..Set reviewFinding to The reviews search did not run, so nothing is reported here..reviewSource to Google results for '@host reviews'.Set reviewSource to Google results for '@host reviews'.reviewRecord to nothing.Set reviewRecord to nothing.reviewSearchErrorIf a step below fails, save the error as reviewSearchErrorTry
reviewRecord.Search Google for '@host reviews'. Save it as reviewRecord.On error
reviewSearchError.message.Show in the output: The reviews search did not complete: reviewSearchError.message.reviewLines to an empty list.Set reviewLines to an empty list.reviewRecord isn't emptyIf reviewRecord isn't emptyYes
searchResult in reviewRecord.results:For each searchResult in reviewRecord.results:resultLink to blank. Change resultLink to blank.linkMissing If a step below fails, save the error as linkMissingTry
searchResult.link and save it as resultLink.Trim searchResult.link and save it as resultLink.On error
Skipped a search result that carried no link..Show in the output: Skipped a search result that carried no link..resultLink isn't empty and resultLink contains :// If resultLink isn't empty and resultLink contains ://Yes
fieldMissingIf a step below fails, save the error as fieldMissingTry
searchResult.title and save it as resultTitle.Trim searchResult.title and save it as resultTitle.resultTitle is emptyIf resultTitle is emptyYes
resultTitle to (no title given).Change resultTitle to (no title given).No
No steps
On error
resultTitle to (no title given).Change resultTitle to (no title given).resultTitle - resultLink to the end of reviewLines and save it as reviewLines.Add resultTitle - resultLink to the end of reviewLines and save it as reviewLines.No
No steps
No
No steps
reviewCount to the length of reviewLines multiplied by 1.Set reviewCount to the length of reviewLines multiplied by 1.reviewLines with a new line and save it as reviewShown.Join the items from index 0 up to 5 of reviewLines with a new line and save it as reviewShown.reviewCount is greater than 0If reviewCount is greater than 0Yes
reviewFinding to What a search for '@host reviews' returns. These are search results, not findings about the business - open each one and weigh the source yourself:Change reviewFinding to What a search for '@host reviews' returns. These are search results, not findings about the business - open each one and weigh the source yourself:
.reviewFinding to reviewFinding plus reviewShown.Change reviewFinding to reviewFinding plus reviewShown.Else if @reviewRecord isn't empty
reviewFinding to A search for '@host reviews' returned nothing. No review page was found - that is nothing found, not a poor review.Change reviewFinding to A search for '@host reviews' returned nothing. No review page was found - that is nothing found, not a poor review.Otherwise
No steps
checkedOn, host, What a search for reviews returns, reviewFinding, reviewSource] to the end of rows and save it as rows.Add [checkedOn, host, What a search for reviews returns, reviewFinding, reviewSource] to the end of rows and save it as rows.rowsWritten to 0.Set rowsWritten to 0.reportRow in rows:For each reportRow in rows:writeErrorIf a step below fails, save the error as writeErrorTry
tabName in spreadsheetUrl.Add a row to tabName in spreadsheetUrl.On error
writeError.message.Show in the output: Could not write a row to the sheet: writeError.message.rowsWritten.Add 1 to rowsWritten.rowsWritten signals about host to the sheet. Each row names where it came from. This is a record of what was found, not a conclusion about the business.Show in the output: Wrote rowsWritten signals about host to the sheet. Each row names where it came from. This is a record of what was found, not a conclusion about the business.