Gathers what public records, the web archive and search results say about a site you don't know, each with its source.

UsesClaudeGoogle SheetsRDAPSerperWayback Machine

Look up an unfamiliar website before you deal with it

ValuesSet siteUrl to blank.Set siteUrl to blank.
ValuesSet spreadsheetUrl to blank.Set spreadsheetUrl to blank.
ValuesSet tabName to blank.Set tabName to blank.
TextMake the first item of the last item of 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.
Decisions & LoopsIf host doesn't contain .If host doesn't contain .
Yes
Decisions & LoopsStop and report a problem: The address in the 'siteUrl' step has no domain name in it. Write a public web address such as https://example.com.Stop and report a problem: The address in the 'siteUrl' step has no domain name in it. Write a public web address such as https://example.com.
No
No steps
Dates & TimesGet today's date and save it as checkedOn.Get today's date and save it as checkedOn.
ValuesSet ownDomain to host.Set ownDomain to host.
ValuesSet rows to an empty list.Set rows to an empty list.
ValuesSet 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..
ValuesSet registrationSource to Public domain registry (RDAP) lookup for host.Set registrationSource to Public domain registry (RDAP) lookup for host.
ValuesSet registryRecord to nothing.Set registryRecord to nothing.
Decisions & LoopsIf a step below fails, save the error as registryErrorIf a step below fails, save the error as registryError
Try
RDAPRDAPLook up domain siteUrl. Save it as registryRecord.Look up domain siteUrl. Save it as registryRecord.
On error
ValuesShow in the output: The domain registry lookup did not complete: registryError.message.Show in the output: The domain registry lookup did not complete: registryError.message.
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim registryRecord.query_url and save it as registrationSource.Trim registryRecord.query_url and save it as registrationSource.
Decisions & LoopsIf registrationSource is emptyIf registrationSource is empty
Yes
ValuesChange registrationSource to Public domain registry (RDAP) lookup for host.Change registrationSource to Public domain registry (RDAP) lookup for host.
No
No steps
On error
ValuesChange registrationSource to Public domain registry (RDAP) lookup for host.Change registrationSource to Public domain registry (RDAP) lookup for host.
ValuesSet registrationRecord to registryRecord.result.Set registrationRecord to registryRecord.result.
ValuesSet registeredOn to not published by the registry.Set registeredOn to not published by the registry.
ValuesSet registrarName to not published by the registry.Set registrarName to not published by the registry.
ValuesSet registrantName to not published by the registry.Set registrantName to not published by the registry.
ValuesSet registrantCountry to not published by the registry.Set registrantCountry to not published by the registry.
Decisions & LoopsIf registryRecord.found is yesIf registryRecord.found is yes
Yes
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim registrationRecord.domain and save it as ownDomain.Trim registrationRecord.domain and save it as ownDomain.
Decisions & LoopsIf ownDomain is emptyIf ownDomain is empty
Yes
ValuesChange ownDomain to host.Change ownDomain to host.
No
No steps
On error
ValuesChange ownDomain to host.Change ownDomain to host.
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim registrationRecord.registration_date and save it as registeredOn.Trim registrationRecord.registration_date and save it as registeredOn.
Decisions & LoopsIf registeredOn is emptyIf registeredOn is empty
Yes
ValuesChange registeredOn to not published by the registry.Change registeredOn to not published by the registry.
No
No steps
On error
ValuesChange registeredOn to not published by the registry.Change registeredOn to not published by the registry.
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim registrationRecord.registrar and save it as registrarName.Trim registrationRecord.registrar and save it as registrarName.
Decisions & LoopsIf registrarName is emptyIf registrarName is empty
Yes
ValuesChange registrarName to not published by the registry.Change registrarName to not published by the registry.
No
No steps
On error
ValuesChange registrarName to not published by the registry.Change registrarName to not published by the registry.
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim registrationRecord.registrant and save it as registrantName.Trim registrationRecord.registrant and save it as registrantName.
Decisions & LoopsIf registrantName is emptyIf registrantName is empty
Yes
ValuesChange registrantName to not published by the registry.Change registrantName to not published by the registry.
No
No steps
On error
ValuesChange registrantName to not published by the registry.Change registrantName to not published by the registry.
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim registrationRecord.registrant_country and save it as registrantCountry.Trim registrationRecord.registrant_country and save it as registrantCountry.
Decisions & LoopsIf registrantCountry is emptyIf registrantCountry is empty
Yes
ValuesChange registrantCountry to not published by the registry.Change registrantCountry to not published by the registry.
No
No steps
On error
ValuesChange registrantCountry to not published by the registry.Change registrantCountry to not published by the registry.
ValuesChange registrationFinding to Registered on registeredOn, through registrar registrarName.Change registrationFinding to Registered on registeredOn, through registrar registrarName.
ValuesChange registrationFinding to registrationFinding Registrant as published: registrantName. Registrant country: registrantCountry.Change registrationFinding to registrationFinding Registrant as published: registrantName. Registrant country: registrantCountry.
ValuesChange 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
ValuesChange 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
ListsAdd [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.
ValuesSet 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..
ValuesSet archiveSource to Internet Archive, https://web.archive.org/web/*/@host.Set archiveSource to Internet Archive, https://web.archive.org/web/*/@host.
ValuesSet archiveRecord to nothing.Set archiveRecord to nothing.
Decisions & LoopsIf a step below fails, save the error as archiveErrorIf a step below fails, save the error as archiveError
Try
Wayback MachineWayback MachineGet the capture history of host. Save it as archiveRecord.Get the capture history of host. Save it as archiveRecord.
On error
ValuesShow in the output: The web archive lookup did not complete: archiveError.message.Show in the output: The web archive lookup did not complete: archiveError.message.
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim archiveRecord.calendar_url and save it as archiveSource.Trim archiveRecord.calendar_url and save it as archiveSource.
Decisions & LoopsIf archiveSource is emptyIf archiveSource is empty
Yes
ValuesChange 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
ValuesChange archiveSource to Internet Archive, https://web.archive.org/web/*/@host.Change archiveSource to Internet Archive, https://web.archive.org/web/*/@host.
ValuesSet firstCaptured to not recorded.Set firstCaptured to not recorded.
MathSet captureCount to archiveRecord.total_captures multiplied by 1.Set captureCount to archiveRecord.total_captures multiplied by 1.
Decisions & LoopsIf archiveRecord.is_archived is yesIf archiveRecord.is_archived is yes
Yes
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim archiveRecord.first_captured_at and save it as firstCaptured.Trim archiveRecord.first_captured_at and save it as firstCaptured.
Decisions & LoopsIf firstCaptured is emptyIf firstCaptured is empty
Yes
ValuesChange firstCaptured to not recorded.Change firstCaptured to not recorded.
No
No steps
On error
ValuesChange firstCaptured to not recorded.Change firstCaptured to not recorded.
ValuesChange 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
ValuesChange 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
ListsAdd [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.
ValuesSet 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..
ValuesSet disclosureSource to siteUrl.Set disclosureSource to siteUrl.
ValuesSet pageText to blank.Set pageText to blank.
ValuesSet pageReached to false.Set pageReached to false.
Decisions & LoopsIf a step below fails, save the error as fetchErrorIf a step below fails, save the error as fetchError
Try
HTTPFetch siteUrl and save it as response.Fetch siteUrl and save it as response.
ValuesChange pageReached to response.ok.Change pageReached to response.ok.
TextTrim response.body and save it as pageText.Trim response.body and save it as pageText.
On error
ValuesShow in the output: Could not open the site's page: 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.
ValuesSet 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 ---.
ValuesSet statedDetails to blank.Set statedDetails to blank.
Decisions & LoopsIf pageReached is yes and pageText isn't emptyIf pageReached is yes and pageText isn't empty
Yes
Decisions & LoopsIf a step below fails, save the error as readingErrorIf a step below fails, save the error as readingError
Try
ClaudeClaudeAsk Claude: pagePrompt. Save it as extraction.Ask Claude: pagePrompt. Save it as extraction. Maximum response length: 400
TextTrim extraction.response_text and save it as statedDetails.Trim extraction.response_text and save it as statedDetails.
On error
ValuesShow in the output: Could not read the details off the page: readingError.message.Show in the output: Could not read the details off the page: readingError.message.
TextMatch keywords in statedDetails and save it as opinionCheck.Match keywords in statedDetails and save it as opinionCheck.
Decisions & LoopsIf opinionCheck.is_match is yesIf opinionCheck.is_match is yes
Yes
ValuesChange 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
ValuesChange disclosureFinding to statedDetails.Change disclosureFinding to statedDetails.
Otherwise
ValuesChange 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
ListsAdd [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.
ValuesSet 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..
ValuesSet mentionSource to Google results for the exact phrase @host.Set mentionSource to Google results for the exact phrase @host.
ValuesSet searchRecord to nothing.Set searchRecord to nothing.
Decisions & LoopsIf a step below fails, save the error as searchErrorIf a step below fails, save the error as searchError
Try
SerperSerperSearch Google for '@host'. Save it as searchRecord.Search Google for '@host'. Save it as searchRecord.
On error
ValuesShow in the output: The web search did not complete: searchError.message.Show in the output: The web search did not complete: searchError.message.
ValuesSet resultLink to blank.Set resultLink to blank.
ValuesSet resultHost to blank.Set resultHost to blank.
ValuesSet resultTitle to blank.Set resultTitle to blank.
ValuesSet mentionLines to an empty list.Set mentionLines to an empty list.
Decisions & LoopsIf searchRecord isn't emptyIf searchRecord isn't empty
Yes
Decisions & LoopsFor each searchResult in searchRecord.results:For each searchResult in searchRecord.results:
Values Change resultLink to blank. Change resultLink to blank.
Decisions & Loops If a step below fails, save the error as linkMissing If a step below fails, save the error as linkMissing
Try
TextTrim searchResult.link and save it as resultLink.Trim searchResult.link and save it as resultLink.
On error
ValuesShow in the output: Skipped a search result that carried no link..Show in the output: Skipped a search result that carried no link..
Decisions & Loops If resultLink isn't empty and resultLink contains :// If resultLink isn't empty and resultLink contains ://
Yes
TextMake the first item of the last item of 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.
Decisions & LoopsIf resultHost is not ownDomain and resultHost doesn't end with .@ownDomain…If resultHost is not ownDomain and resultHost doesn't end with .@ownDomain…
Yes
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim searchResult.title and save it as resultTitle.Trim searchResult.title and save it as resultTitle.
Decisions & LoopsIf resultTitle is emptyIf resultTitle is empty
Yes
ValuesChange resultTitle to (no title given).Change resultTitle to (no title given).
No
No steps
On error
ValuesChange resultTitle to (no title given).Change resultTitle to (no title given).
ListsAdd 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
MathSet mentionCount to the length of mentionLines multiplied by 1.Set mentionCount to the length of mentionLines multiplied by 1.
TextJoin the items from index 0 up to 5 of 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.
Decisions & LoopsIf mentionCount is greater than 0If mentionCount is greater than 0
Yes
ValuesChange 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: .
MathChange mentionFinding to mentionFinding plus mentionShown.Change mentionFinding to mentionFinding plus mentionShown.
Else if @searchRecord isn't empty
ValuesChange 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
ListsAdd [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.
ValuesSet 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..
ValuesSet reviewSource to Google results for '@host reviews'.Set reviewSource to Google results for '@host reviews'.
ValuesSet reviewRecord to nothing.Set reviewRecord to nothing.
Decisions & LoopsIf a step below fails, save the error as reviewSearchErrorIf a step below fails, save the error as reviewSearchError
Try
SerperSerperSearch Google for '@host reviews'. Save it as reviewRecord.Search Google for '@host reviews'. Save it as reviewRecord.
On error
ValuesShow in the output: The reviews search did not complete: reviewSearchError.message.Show in the output: The reviews search did not complete: reviewSearchError.message.
ValuesSet reviewLines to an empty list.Set reviewLines to an empty list.
Decisions & LoopsIf reviewRecord isn't emptyIf reviewRecord isn't empty
Yes
Decisions & LoopsFor each searchResult in reviewRecord.results:For each searchResult in reviewRecord.results:
Values Change resultLink to blank. Change resultLink to blank.
Decisions & Loops If a step below fails, save the error as linkMissing If a step below fails, save the error as linkMissing
Try
TextTrim searchResult.link and save it as resultLink.Trim searchResult.link and save it as resultLink.
On error
ValuesShow in the output: Skipped a search result that carried no link..Show in the output: Skipped a search result that carried no link..
Decisions & Loops If resultLink isn't empty and resultLink contains :// If resultLink isn't empty and resultLink contains ://
Yes
Decisions & LoopsIf a step below fails, save the error as fieldMissingIf a step below fails, save the error as fieldMissing
Try
TextTrim searchResult.title and save it as resultTitle.Trim searchResult.title and save it as resultTitle.
Decisions & LoopsIf resultTitle is emptyIf resultTitle is empty
Yes
ValuesChange resultTitle to (no title given).Change resultTitle to (no title given).
No
No steps
On error
ValuesChange resultTitle to (no title given).Change resultTitle to (no title given).
ListsAdd 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
MathSet reviewCount to the length of reviewLines multiplied by 1.Set reviewCount to the length of reviewLines multiplied by 1.
TextJoin the items from index 0 up to 5 of 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.
Decisions & LoopsIf reviewCount is greater than 0If reviewCount is greater than 0
Yes
ValuesChange 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: .
MathChange reviewFinding to reviewFinding plus reviewShown.Change reviewFinding to reviewFinding plus reviewShown.
Else if @reviewRecord isn't empty
ValuesChange 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
ListsAdd [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.
ValuesSet rowsWritten to 0.Set rowsWritten to 0.
Decisions & LoopsFor each reportRow in rows:For each reportRow in rows:
Decisions & LoopsIf a step below fails, save the error as writeErrorIf a step below fails, save the error as writeError
Try
Google SheetsGoogle SheetsAdd a row to tabName in spreadsheetUrl.Add a row to tabName in spreadsheetUrl.
On error
ValuesShow in the output: Could not write a row to the sheet: writeError.message.Show in the output: Could not write a row to the sheet: writeError.message.
ValuesAdd 1 to rowsWritten.Add 1 to rowsWritten.
ValuesShow 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.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.