# user-agents

> A library to identify devices (phones, tablets) and their capabilities by parsing browser user agent strings.

- **URL**: https://www.freshcrate.ai/projects/user-agents
- **Author**: Selwin Ong
- **Category**: AI Agents
- **Latest version**: `2.2.0` (2026-04-21)
- **License**: MIT
- **Source**: https://github.com/selwin/python-user-agents
- **Language**: Python
- **GitHub**: 1,516 stars, 194 forks
- **Registry**: pypi (`user-agents`)
- **Tags**: `pypi`

## Description

Python User Agents
==================

`user_agents` is a Python library that provides an easy way to identify/detect devices like mobile phones, tablets and their capabilities by parsing (browser/HTTP) user agent strings. The goal is to reliably detect whether:

* User agent is a mobile, tablet or PC based device
* User agent has touch capabilities (has touch screen)

`user_agents` relies on the excellent [ua-parser](https://github.com/ua-parser/uap-python) to do the actual parsing of the raw user agent string.

Installation
------------

![Build status](https://secure.travis-ci.org/selwin/python-user-agents.png)

`user-agents` is hosted on [PyPI](http://pypi.python.org/pypi/user-agents/) and can be installed as such:

    pip install pyyaml ua-parser user-agents

Alternatively, you can also get the latest source code from [Github](https://github.com/selwin/python-user-agents) and install it manually.

Usage
-----

Various basic information that can help you identify visitors can be accessed `browser`, `device` and `os` attributes. For example:

```python
from user_agents import parse

# iPhone's user agent string
ua_string = 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'
user_agent = parse(ua_string)

# Accessing user agent's browser attributes
user_agent.browser  # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1')
user_agent.browser.family  # returns 'Mobile Safari'
user_agent.browser.version  # returns (5, 1)
user_agent.browser.version_string   # returns '5.1'

# Accessing user agent's operating system properties
user_agent.os  # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1')
user_agent.os.family  # returns 'iOS'
user_agent.os.version  # returns (5, 1)
user_agent.os.version_string  # returns '5.1'

# Accessing user agent's device properties
user_agent.device  # returns Device(family=u'iPhone', brand=u'Apple', model=u'iPhone')
user_agent.device.family  # returns 'iPhone'
user_agent.device.brand # returns 'Apple'
user_agent.device.model # returns 'iPhone'

# Viewing a pretty string version
str(user_agent) # returns "iPhone / iOS 5.1 / Mobile Safari 5.1"
```

`user_agents` also expose a few other more "sophisticated" attributes that are derived from one or more basic attributes defined above. As for now, these attributes should correctly identify popular platforms/devices, pull requests to support smaller ones are always welcome.

Currently these attributes are supported:

* `is_mobile`: whether user agent is identified as a mobile phone (iPhone, Android phones, Blackberry, Windows Phone devices etc)
* `is_tablet`: whether user agent is identified as a tablet device (iPad, Kindle Fire, Nexus 7 etc)
* `is_pc`: whether user agent is identified to be running a traditional "desktop" OS (Windows, OS X, Linux)
* `is_touch_capable`: whether user agent has touch capabilities
* `is_bot`: whether user agent is a search engine crawler/spider

For example:

```python
from user_agents import parse

# Let's start from an old, non touch Blackberry device
ua_string = 'BlackBerry9700/5.0.0.862 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/331 UNTRUSTED/1.0 3gpp-gba'
user_agent = parse(ua_string)
user_agent.is_mobile # returns True
user_agent.is_tablet # returns False
user_agent.is_touch_capable # returns False
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "BlackBerry 9700 / BlackBerry OS 5 / BlackBerry 9700"

# Now a Samsung Galaxy S3
ua_string = 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
user_agent = parse(ua_string)
user_agent.is_mobile # returns True
user_agent.is_tablet # returns False
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "Samsung GT-I9300 / Android 4.0.4 / Android 4.0.4"

# iPad's user agent string
ua_string = 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10'
user_agent = parse(ua_string)
user_agent.is_mobile # returns False
user_agent.is_tablet # returns True
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "iPad / iOS 3.2 / Mobile Safari 4.0.4"

# Kindle Fire's user agent string
ua_string = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true'
user_agent = parse(ua_string)
user_agent.is_mobile # returns False
user_agent.is_tablet # returns True
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "Kindle / Android / Amazon Silk 1.1.0-80"

# Touch capable Win

## Recent releases

| Version | Date | Urgency | Changes |
| --- | --- | --- | --- |
| `2.2.0` | 2026-04-21 | Low | Imported from PyPI (2.2.0) |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |
| `v2.2.0` | 2020-08-23 | Low | * `ua-parser` >= 0.10.0 is required. Thanks @jnozsc! * Added `get_device()`, `get_os()` and `get_browser()` instance methods to `UserAgent`. Thanks @rodrigondec! |

## Citation

- HTML: https://www.freshcrate.ai/projects/user-agents
- Markdown: https://www.freshcrate.ai/projects/user-agents.md
- Dependencies JSON: https://www.freshcrate.ai/api/projects/user-agents/deps

_Generated by freshcrate.ai. Indexes pypi releases for AI-agent ecosystem packages._
