Test ContactTap
What this page tests. ContactTap's job is to find phone numbers, email addresses, and postal addresses on the page you're viewing, and offer the right action for each. Every section below feeds the scanner one real-world shape that contact info actually takes in the wild — structured data a business site publishes for search engines, tap-to-call links, plain text in a dozen formats, and the messy stuff that looks like contact info but isn't.
Each item is tagged with the expected result: found means it should appear in the popup, ignored means the scanner must not report it (false-positive guard), and known miss marks a real-world format the current scanner doesn't catch yet — documented honestly, and used as the working list for improving it.
How to use it
- Install and enable ContactTap in Safari, then open this page.
- Tap the ContactTap toolbar button. Safari asks permission for this page (that's the “active tab” grant working as designed); allow it.
- Compare the popup's results against the tags below: every found item present, every ignored item absent.
Every name, number, email, and street address on this page is
fictional — phone numbers come from reserved
fictional-number ranges, emails use the reserved
example.com family of domains. Nothing here reaches a
real person if you tap Call by accident.
1 · Structured data (JSON-LD) — contact cards
Business sites publish contact info as invisible
application/ld+json blocks for search engines.
ContactTap reads these first — they're the highest-precision
source and become named cards in the popup.
The blocks below are real script tags in this page's markup; the
boxes just describe what's inside them.
-
US business, full PostalAddress object
found — card
A
LocalBusinessnamed “Silver State Coffee Roasters” with a phone, an email, and a street / suite / city / state / ZIP address object. Expected: one card carrying all three, address assembled as412 Fremont Street, Suite 8, Las Vegas, NV 89101. -
German business, nested inside
@graph+contactPoint, address as one string found — card Tests recursion into nested structures, a plain-string address, and a non-US phone. Expected: a “Beispiel Kaffeehaus GmbH” card with the Berlin address and+49 30 12345678formatted internationally. -
Malformed JSON-LD (trailing comma)
ignored
Broken structured data is common in the wild. Expected: skipped
silently — no card, no crash, and its phone number
(
…555-0999) does not appear anywhere.
2 · Tap-to-call, tap-to-text, and mailto links
Sites that already offer tel:, sms:, and
mailto: links are declaring their contact info outright.
Expected: each resolves to a clean entry — and the query junk
after ? is stripped.
-
Plain
tel:link found — phone Call our Reno desk —tel:+17755550119, expected as(775) 555-0119. -
tel:link with trailing parameters found — phone Call the warehouse — everything from the;on is stripped, expected as(702) 555-0163. -
sms:link found — phone Text the front desk —sms:targets are phone numbers too; expected as(702) 555-0187. -
mailto:with a subject query found — email Email bookings — expected as[email protected], subject stripped. -
Uppercase
mailto:found — email Email the front desk — expected lowercased to[email protected].
3 · Semantic <address> elements
The HTML <address> tag is how well-built pages mark
contact blocks. ContactTap trusts it when it looks postal (contains a
digit); pure author-credit uses are ignored.
-
Multi-line postal address with
<br>breaks found — address The classic contact-page block, and the acid test for the clean-copy promise — Copy must yield a tidy address, not a run-together string:Comstock Assay Office
77 C Street, Suite 300
Virginia City, NV 89440 -
PO Box inside
<address>found — address PO boxes have no street suffix for pattern-matching to anchor on, so the semantic tag is what catches this one:PO Box 1873, Carson City, NV 89702 -
Author-credit
<address>(no digits) ignored as address Blogs use the same tag for bylines. No digits, so it's ignored as an address — though the email link inside is still found via the mailto path:Written by the editor
4 · US phone numbers in plain text
Expected: every format below is recognized, deduplicated, and displayed in clean national format. This page's default region is US (inferred from the first structured address above).
- Parenthesized found Call us at (702) 555-0104 any weekday.
- Hyphenated found Fax: 702-555-0105.
- Dotted found Support line 775.555.0106, ask for dispatch.
- Spaced, with country code found From abroad dial +1 702 555 0107.
- Toll-free found Orders: 1-800-555-0199 (24 hours).
- With an extension found Main office (702) 555-0108 ext. 214 — the extension is part of the number, not a second hit.
-
Same number as both a link and text
found once
Our Reno desk again in plain text: (775) 555-0119. This duplicates
the
tel:link in section 2 — expected exactly once in the popup, not twice.
5 · International phone numbers in plain text
Expected: numbers written with a + country code are
recognized from any region and shown in international format.
- United Kingdom found London office: +44 20 7946 0958.
- UK, unspaced found Ring +441632960983 after hours.
- France found Bureau de Paris : +33 1 99 00 12 34.
- Australia found Sydney: +61 2 5550 1234.
- Japan found Tokyo desk: +81 3-4520-9999.
-
Foreign number in national format, no
+known miss “Call our London office on 020 7946 0958” — on a US-default page a bare UK national number is indistinguishable from a malformed US one, so it is deliberately not reported rather than guessed at.
6 · Email addresses in plain text
Expected: each address below is found and lowercased, with duplicates collapsed.
- Simple found Write to [email protected] for general questions.
- Dotted local part found Reach the owner at [email protected].
- Plus-tag found Newsletter issues go to [email protected].
- Subdomain + hyphenated domain found Vendors use [email protected].
- Country TLD found Our UK reseller is [email protected].
- Duplicate in different case found once [email protected] is the same mailbox as the first item — expected once, lowercased.
7 · Postal addresses in plain text — the format gauntlet
This is the section the address scanner earns its keep on. US addresses anchored on street-suffix + city + state + ZIP and UK addresses anchored on the postcode are expected finds; the “known miss” rows document real formats the current patterns don't cover, so improvements can be checked against this same page.
- US single-line, the canonical form found Visit us at 123 East Main Street, Springfield, IL 62704.
- US with suite found Our Denver studio: 500 Oak Avenue, Suite 210, Denver, CO 80203.
-
US with unit as
#found Deliveries to 88 Birch Lane #12, Portland, OR 97201. - US with ZIP+4 found Mail: 2200 Ranch Road, Amarillo, TX 79106-4415.
- Abbreviated suffix, no commas around state found The shop at 4155 Spring Mountain Rd Las Vegas NV 89102 is open daily.
-
Multi-line with
<br>, outside any<address>tag found Line breaks between the parts should not break recognition:Pahrump Feed & Tack
1420 Mesquite Drive
Pahrump, NV 89048 - UK, postcode-anchored found The London pickup point is 10 Downing Street, London SW1A 2AA.
- US with directional after the suffix known miss 1600 Pennsylvania Avenue NW, Washington, DC 20500 — the directional (“NW”) between suffix and city defeats the current US pattern.
-
PO Box in plain text
known miss
Send cheques to PO Box 98765, Tonopah, NV 89049 — no street
suffix to anchor on (the
<address>-tagged PO Box in section 3 is found). - Utah-style grid address known miss 349 S 200 E, Salt Lake City, UT 84111 — grid addresses have no conventional street suffix.
- Canadian known miss 290 Bremner Boulevard, Toronto, ON M5V 3L9 — alphanumeric postal codes match neither the US nor the UK pattern yet.
- German, in plain text known miss Friedrichstraße 43-45, 10117 Berlin — no German text pattern yet (the same city arrives fine via structured data in section 1).
8 · Things that must NOT be detected
A contact scanner is only trustworthy if it stays quiet about digits that aren't contact info. Expected: nothing in this section appears in the popup.
- A price ignored The restoration cost $1,702,555.01 in total.
- An order number ignored Your confirmation is #7025550142.
- A tracking-style digit run after a digit ignored Serial 97025550142 is a part number, not a phone.
- A version string ignored Requires firmware 2.5.1 or newer.
- An ISBN ignored Reference: ISBN 978-0-306-40615-7.
- An IP address ignored The printer lives at 192.168.50.114.
- A 16-digit card-style number ignored Test PAN 4111 1111 1111 1111 (a standard payment-form test value).
- An image filename with @ ignored The asset is named
logo@2x.png. - A package version with @ ignored Installed
libphonenumber-js@1.12.9from the lockfile. - An email with no dot in the domain ignored The dev box mailer is
root@localhost. -
Digits split across table cells
ignored
Fragments from unrelated elements must never fuse into one number:
Aisle Bin Count 702 555 0123 - An obfuscated email known miss — by design “write to don (at) example (dot) com” — deliberately not decoded: the author obfuscated it to keep it away from automated harvesters, and ContactTap respects that.
9 · Contact info inside an image
Expected today: known miss — the scanner reads page text, and this text lives in pixels. On-device text recognition is planned for a later version; when it ships, this becomes a found.
(The card is drawn onto a <canvas> by this page's
own script, so its phone number and email genuinely exist only as
pixels — exactly like a photographed business card or menu.
There is no hidden text version for the scanner to cheat with.)