Skip to content

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.

  • Legend
  • Yes
  • Partial
  • Flag
  • No
  • Unknown
Browser / PlatformSupportVersionsConfidenceSourceNotes
Chrome (Desktop)No—highsource1
Chrome (Android)Yes80highsource—
Edge (Desktop)No—highsource23
Firefox (Desktop)No—highsource4
Firefox (Android)No—highsource56
Safari (macOS)No—highsource7
Safari (iOS)Flag14.5highsource8
Samsung InternetNoremoved in 22.0highsource910
WebView (Android)Yes80highsource11
  1. No Chrome support is recorded in browser-compat-data.
  2. No Edge support is recorded in browser-compat-data.
  3. Derived by browser-compat-data mirroring from Chrome.
  4. Implementation tracking: https://bugzil.la/1756767.
  5. Implementation tracking: https://bugzil.la/1756767.
  6. Derived by browser-compat-data mirroring from Firefox.
  7. No Safari support is recorded in browser-compat-data.
  8. Behind the `Contact Picker API` preference.
  9. Was supported in Samsung Internet from 14.0 until it was removed in 22.0.
  10. This API was exposed but failed upon opening a contact selector.
  11. Derived by browser-compat-data mirroring from Chrome Android.

Source data: /compatibility/contact-picker.json · Global usage: 37 % (StatCounter 2026-05)

Source: spec · MDN · Last verified 2026-10-03 · Confidence: high (computed from sources)

async function pickContacts() {
const props = ['name', 'email', 'tel'];
const opts = { multiple: true };
return navigator.contacts.select(props, opts);
}
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);
}
  • Feature-detect with 'contacts' in navigator && 'ContactsManager' in window before calling select() — 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.

← Back to the Compatibility explorer.