Contact Picker support
Published Updated
The Contact Picker API lets a page ask the user to pick one or more entries from their device’s contact list through a picker interface the user agent presents, then shares only the fields the site requested for the selected entries — the site never gets standing access to the address book. The spec requires the user agent’s interface to satisfy its privacy and selection rules; it does not mandate any specific native or browser-drawn UI implementation.
Browser & ecosystem support
Section titled “Browser & ecosystem support”- Legend
- Yes
- Partial
- Flag
- No
- Unknown
| Browser / Platform | Support | Versions | Confidence | Source | Notes |
|---|---|---|---|---|---|
| Chrome (Desktop) | No | — | high | source | 1 |
| Chrome (Android) | Yes | 80 | high | source | — |
| Edge (Desktop) | No | — | high | source | 23 |
| Firefox (Desktop) | No | — | high | source | 4 |
| Firefox (Android) | No | — | high | source | 56 |
| Safari (macOS) | No | — | high | source | 7 |
| Safari (iOS) | Flag | 14.5 | high | source | 8 |
| Samsung Internet | No | removed in 22.0 | high | source | 910 |
| WebView (Android) | Yes | 80 | high | source | 11 |
- No Chrome support is recorded in browser-compat-data.
- No Edge support is recorded in browser-compat-data.
- Derived by browser-compat-data mirroring from Chrome.
- Implementation tracking: https://bugzil.la/1756767.
- Implementation tracking: https://bugzil.la/1756767.
- Derived by browser-compat-data mirroring from Firefox.
- No Safari support is recorded in browser-compat-data.
- Behind the `Contact Picker API` preference.
- Was supported in Samsung Internet from 14.0 until it was removed in 22.0.
- This API was exposed but failed upon opening a contact selector.
- Derived by browser-compat-data mirroring from Chrome Android.
How to use it
Section titled “How to use it”async function pickContacts() { const props = ['name', 'email', 'tel']; const opts = { multiple: true }; return navigator.contacts.select(props, opts);}Detecting support and falling back
Section titled “Detecting support and falling back”async function shareContacts(props, opts) { if (!('contacts' in navigator && 'ContactsManager' in window)) { // Not supported here — fall back to a manual contact-entry form. return null; } return navigator.contacts.select(props, opts);}Practical checklist
Section titled “Practical checklist”- Feature-detect with
'contacts' in navigator && 'ContactsManager' in windowbefore callingselect()— per the compatibility data above, this is Chrome on Android, with Safari on iOS available only behind an experimental flag. - Call
select()from a real user gesture in a secure, top-level context. - Keep a manual-entry fallback UI ready for every browser without support.
- Don’t describe the picker UI as “native” in your own product copy — the spec only requires a user-agent-presented interface, not a platform-native widget.
Where to go next
Section titled “Where to go next”- Contact Picker API reference — the full
select()syntax, requirements, and error handling. - Screen Wake Lock support — another device-capability compatibility page in this section.
← Back to the Compatibility explorer.