Skip to main content
DeviceAtlas DeviceAtlas
  • Login
  • Get started
  • Products
    • Web
      DeviceAtlas for Web

      Build enterprise grade device awareness

      into your products and services

    • Apps
      DeviceAtlas for Apps

      Device intelligence, targeting and reporting

      in the native apps environment

    • Operators
      Device Map

      Fine grained device intelligence

      indexed by TAC/IMEI

    • DeviceAssure
      DeviceAssure

      Verify the authenticity of devices

      accessing your content and services

    • DeviceAtlas Discover
      DeviceAtlas Discover

      Rich insights about your web traffic that

      analytics platforms don’t tell you about

    DEVICE INTELLIGENCE

    Learn more with our
    intro video

    Deliver an amazing customer
    experience across devices.

    TECHNOLOGY OVERVIEW

    Get an overview of our technology.

  • Use Cases
    • Ad-Tech
      AdTech

      Enable granular device targeting of your campaigns.

      Maximize revenue from impressions and reduce discrepancies

    • Optimization
      Web Optimization

      Ensure content is delivered in a form that’s

      optimized for the end user’s device

    • Analytics
      Analytics

      Understand customer engagement at

      device level

    • Internet of Things
      Internet of Things

      Measure IoT activity on your network

    • OTT Streaming
      Online Streaming Services

      Identity OTT traffic from STBs, Smart

      TVs, and Games Consoles

    • eCommerce
      eCommerce

      Identify factors affecting cart abandonment rates, and ensure optimal user experiences for mobile devices.

    • Gaming
      Gaming

      Enhance knowledge of gaming devices for better analytics and reporting, real-time QoS/QoE monitoring, and more relevant targeting opportunities.

    • Reverse Logistics
      Reverse Logistics

      -

    • Device Insurance
      Device Insurance

      -

    CASE STUDIES

    Learn how market
    leaders are using us
    to outperform their
    competition

    Adoppler and our partners have experienced significant improvements since implementing DeviceAtlas.

    Anton Tkachuk

    Product Manager, Adoppler

    View all case studies

  • Pricing
  • Developers
    • Technology Overview

      Get an overview of our technology

    • Getting Started

      Step by step guide to get up and running fast

    • APIs

      Downloads and information on all APIs

    • About the data

      Device data and available properties

    • Docs & Support

      FAQ's documentation and support

    • Knowledge Base

      Explore our expansive library of free

      whitepapers, eBooks and how-to guide

  • Data & Insights
    • Blog

      Stay informed with our articles on device

      research, data and insights

    • Case Studies

      See why market leaders choose DeviceAtlas

    • Device Browser

      Device information and properties

    • Data Explorer

      Explore and analyse DeviceAtlas data

    • Properties

      Check out our available device properties

    • HTTP Headers Parser

      Check DeviceAtlas results for HTTP Headers

  • Login
  • Get started
Log inSign up
Forgot Password?

Sign up below to view device data and get your trial account.

Passwords match:

Cancel
  • Products
    • DeviceAtlas for Web
    • DeviceAtlas for Apps
    • Device Map
    • DeviceAssure
    • DeviceAtlas Discover
    • Technology Overview
  • Use Cases
    • AdTech
    • Web Optimization
    • Analytics
    • Internet of Things
    • Online Streaming Services
    • eCommerce
    • Gaming
    • Reverse Logistics
    • Device Insurance
    • Case Studies
  • Pricing
  • Developers
    • Technology Overview
    • Getting Started
    • APIs
    • About the Data
    • Docs & Support
    • Knowledge Base
  • Data & Insights
    • Blog
    • Case Studies
    • Device Browser
    • Data Explorer
    • Properties
    • HTTP Headers Parser
  • Login
  • Get started
  • Search

Getting Started

  • Enterprise
    • DeviceAtlas for Web
    • DeviceAtlas for Apps
  • Cloud
  • DeviceAssure
    • DeviceAssure for Web
    • DeviceAssure for Apps
  • Discover

APIs

  • Enterprise APIs
    • Download API
    • Documentation
    • API examples
    • Performance
  • Cloud Service
    • Download API
    • Documentation
    • Cloud Service End-Points
    • Google Sheets Integration
  • DeviceAssure APIs
    • Download API
    • Documentation
  • Client-side Component
    • iOS H/W Identification
    • Usage
    • Download
  • REST API
  • User-Agent Client Hints
    • Developer considerations
    • Web server configuration
    • OpenRTB and UA-CH
    • Capturing in JavaScript
    • Header precedence logic

Data

  • Data Downloads
    • Carrier Data
    • Device Data (JSON)
    • Device Map (TAC)
  • Data File Configuration
  • Contributing
  • About Our Data
  • Dynamic Data
  • Becoming a Data Partner

Properties

  • Available Properties
  • Client-side Properties

FAQ

  • Support
  • General
  • Licensing

More

  • Side-loaded Browsers
  • Whitepapers
  • Case Studies

Resources

Getting Started - DeviceAtlas for Web

Follow these simple steps to have the DeviceAtlas Enterprise API working locally within a few minutes.
If you do not have a licence, please contact us to request an evaluation.

1. Download Device Data File

This step is not required for Java API.

For the Enterprise solution, device data is packaged in a JSON format, which is highly compressed to reduce server footprint, and is optimized for speed of search and retrieval. It can either be downloaded manually or fetched with an automated script.

Refer to our Device Data (JSON) reference documentation to know more about DeviceAtlas data downloads.

2. Device Identification API

Java
Node.JS
PHP
.NET
Python
Ruby
C
C++
Go
Nginx
HaProxy
Apache
IIS
DeviceApi deviceApi = new DeviceApi();
deviceApi.downloadAndLoadDataFile("https://deviceatlas.com/getJSON?licencekey=YOUR-LICENCE-KEY&index=web&format=gzip");
Map<String, String> headers = new HashMap<String, String>();
headers.put("HEADER NAME", "HEADER VALUE");
Properties properties = deviceApi.getProperties(headers);
String userAgent = "THE USER AGENT VALUE";
Properties properties = deviceApi.getProperties(userAgent);
boolean mobileDevice = properties.contains("mobileDevice", true);
int displayWidth = properties.containsKey("displayWidth")? properties.get("displayWidth").asInteger(): 100;
String vendor = properties.containsKey("vendor")? properties.get("vendor").asString(): "";
boolean useBiggerIcons = properties.contains("touchScreen", true);
var deviceApi = new DeviceApi();
deviceApi.loadDataFromFile('/path/to/DeviceAtlas.json');
var properties = deviceApi.getPropertiesFromRequest(request);
var mobileDevice = properties.contains('mobileDevice', true);
var displayWidth = properties.containsKey('displayWidth')? properties.get('displayWidth').getValue(): 100;
var vendor = properties.containsKey('vendor')? properties.get('vendor').getValue(): '';
var useBiggerIcons = properties.contains('touchScreen', true);
$deviceApi = new Mobi_Mtld_DA_Device_DeviceApi();
$deviceApi->loadDataFromFile("/path/to/DeviceAtlas.json");
$properties = $deviceApi->getProperties();
$mobileDevice = $properties->contains("mobileDevice", true);
$displayWidth = $properties->containsKey("displayWidth") ? $properties->get("displayWidth")->asInteger() : 100;
$vendor = $properties->containsKey("vendor") ? $properties->get("vendor")->asString() : "";
$useBiggerIcons = $properties->contains("touchScreen", true);
DeviceApi deviceApi = new DeviceApi();
deviceApi.LoadDataFromFile("/path/to/DeviceAtlas.json");
IDictionary<string, string> headers = new Dictionary<string, string>() { {"HEADER NAME", "HEADER VALUE"} };
Properties properties = deviceApi.GetProperties(headers);
string userAgent = "THE USER AGENT VALUE";
Properties properties = deviceApi.GetProperties(userAgent);
bool mobileDevice = properties.Contains("mobileDevice", true);
int displayWidth = properties.ContainsKey("displayWidth")? properties["displayWidth"].AsInteger(): 100;
string vendor = properties.ContainsKey("vendor")? properties["vendor"].AsString(): "";
bool useBiggerIcons = properties.Contains("touchScreen", true);
device_api = DeviceApi()
device_api.load_data_from_file("/path/to/DeviceAtlas.json")
headers = {"User-Agent": "THE USER AGENT VALUE"}
properties = device_api.get_properties(headers)
mobile_device = properties.contains("mobileDevice", True)
display_width = int(properties["displayWidth"]) if ("displayWidth" in properties) else 100
vendor = properties.get("vendor") if "vendor" in properties else ""
use_bigger_icons = properties.contains("touchScreen", True)
device_api = Mobi::Mtld::Da::Device::DeviceApi.new
device_api.load_data_from_file "/path/to/DeviceAtlas.json"
headers = {"User-Agent" => "THE USER AGENT VALUE"}
properties = device_api.get_properties headers
mobile_device = properties.contains?(:"mobileDevice", true)
display_width = properties.has_key?(:displayWidth) ? properties[:displayWidth].to_i : 100
vendor = properties.has_key?(:vendor) ? properties.get(:vendor) : ""
use_bigger_icons = properties.contains?(:"touchScreen", true)
da_atlas_t deviceApi;
da_status_t status;
void *ptr;
size_t size;
FILE *jsonp;
time_t jsond;
const char *jsonpath = "/path/to/DeviceAtlas.json";
const char *useragent = "THE USER AGENT VALUE";
const char *curpropname;

da_evidence_id_t useragentid;
da_deviceinfo_t device;
da_type_t curtype;
da_propid_t *curprop;
da_property_decl_t extraprops[1] = { { 0, 0 } };

if ((jsonp = fopen(jsonpath, "r")) == NULL) {
    fprintf(stderr, "fopen failed: %s\n", jsonpath);
    return 0;
}

ex_da_init();

if ((status = da_atlas_compile(jsonp, jsonread, jsonseek, &ptr, &size)) != DA_OK) {
    fclose(jsonp);
    fprintf(stderr, "da_atlas_compile failed (status = %d)\n", status);
    ex_da_fini();
}

fclose(jsonp);

if ((status = da_atlas_open(&deviceApi, extraprops, ptr, size)) != DA_OK) {
    fprintf(stderr, "da_atlas_open failed (status = %d)\n", status);
    ex_da_fini();
}
useragentid = da_atlas_header_evidence_id(&atlas, "User-Agent");

if ((status = da_search(&deviceApi, &device, useragentid, useragent, 0)) == DA_OK) {
    for (status = da_getfirstprop(&device, &curprop); status == DA_OK;
            status = da_getnextprop(&device, &curprop)) {
        da_getpropname(&device, *curprop, &curpropname);
        da_getproptype(&device, *curprop, &curtype);

        if (strcmp(curpropname, "mobileDevice") == 0) {
            bool curvalue;
            da_getpropboolean(&device, *curprop, &curvalue);
            printf("%s => %s\n", curpropname, curvalue ? "true" : "false");
        }

        if (strcmp(curpropname, "displayWidth") == 0) {
            long curvalue;
            da_getpropinteger(&device, *curprop, &curvalue);
            printf("%s => %d\n", curpropname, curvalue ? curvalue : 100);
        }

        if (strcmp(curpropname, "vendor") == 0) {
            const char *curvalue;
            da_getpropstring(&device, *curprop, &curvalue);
            printf("%s => %s\n", curpropname, curvalue ? curvalue : "");
        }
    }
    da_close(&device);
}

da_atlas_close(&deviceApi);
free(ptr);
Da::DeviceAtlas deviceApi;
deviceApi.loadDataFromFile("/path/to/DeviceAtlas.json");
Da::HeaderMap map;
map["user-agent"] = "THE USER AGENT VALUE";

...

Da::HttpHeaders headers(map);
Da::DeliveryContext properties(deviceApi, headers);
mobileDevice = properties.contains("mobileDevice", true);
displayWidth = (long)*properties["displayWidth"];
vendor = (std::string)*properties["vendor"];
useBiggerIcons = (bool)*properties["touchScreen"];
var da *deviceatlas.DaGo
da = deviceatlas.New()
_, err := da.LoadDataFromFile("/path/to/DeviceAtlas.json")
m := make(map[string]string)
m["user-agent"] = "THE USER AGENT VALUE"
properties := da.Detect(m);
mobileDevice := properties["mobileDevice"]
displayWidth := properties["displayWidth"]
vendor := properties["vendor"]
useBiggerIcons := properties["touchScreen"]
load_module /path/to/ngx_http_deviceatlas_module.so;
variables_hash_max_size 2048;
devatlas_db "/path/to/DeviceAtlas.json";
fastcgi_param DA_MOBILE_DEVICE $da_mobileDevice;
fastcgi_param DA_DISPLAY_WIDTH $da_displayWidth;
fastcgi_param DA_VENDOR $da_vendor;
fastcgi_param DA_TOUCH_SCREEN $da_touchScreen;
# In HTTP block
map $da_mobileDevice $redirectToAMP {
    true 1;
    false 0;
    default 0;
}

# In server block
if ($redirectToAMP) {
    rewrite ^/(index.html|^/|)$ /AMP/$1 last;
}
global
    deviceatlas-json-file <path to DeviceAtlas json file>
http-request set-header X-DeviceAtlas-Data %[da-csv-fetch(mobileDevice,displayWidth,vendor,touchScreen)]
acl is_mobile da-csv-fetch(mobileDevice) 1
LoadModule da_module "/path/to/module/libmod_da.so"
<VirtualHost *:80>
    DA On
    DAJsonFilePath "/path/to/DeviceAtlas.json"
    DocumentRoot /var/www/html
</VirtualHost>
<Directory "/var/www/html/">
    RewriteEngine On
    RewriteCond "%{HTTP:X-DeviceAtlas-mobileDevice}" 1
    RewriteRule "^/(index.html|^/|)$"  "/mobile.html" [L]
</Directory>
DAJSONFILEPATH=/path/to/DeviceAtlas.json
if (Request.Headers["HTTP_X_DEVATLAS_MOBILEDEVICE"] != null
    && Request.Headers["HTTP_X_DEVATLAS_MOBILEDEVICE"].ToString().Equals("1")) {
}

You can find all information related to the Java DeviceAtlas Enterprise API here.

3. Data File Options

Default data file only has  21 out of 177  properties selected. Please visit Data File Options page to customize which device properties are to be included in data file.

4. Client-side Component

The Client-side Component is needed for granular identification of iOS devices, as well as for other dynamic properties. Please visit DeviceAtlas Client-side Component.

Questions?

If you need assistance, contact us at support@deviceatlas.com for technical support directly from R&D. For business questions and access to an evaluation licence, contact sales.

DeviceAtlas identifies and verifies connected devices in real-time for rich, actionable intelligence across every customer touchpoint

DeviceAtlas LinkedIn DeviceAtlas X DeviceAtlas YouTube

Our Products

DeviceAtlas for Web

The full picture on web traffic with detailed metadata on all visiting devices

DeviceAtlas for Apps

Device intelligence, targeting and reporting in the native apps environment

DeviceAssure

Real-time identification of fraudulent and misrepresented traffic

Device Map

TAC-based device insights for the mobile ecosystem, in partnership with the GSMA

Industries

AdTech Optimization Analytics Internet of Things OTT / Streaming eCommerce Gaming Reverse Logistics Device Insurance

Quick links

Pricing About us Events Blog Device Intelligence Device Detection Technology Partners Case Studies Data & Insights Developers Contact us

Copyright © DeviceAtlas Limited 2025. All Rights Reserved. Terms & Conditions | Privacy Policy

This is a website of DeviceAtlas Limited, a private company limited by shares, incorporated and registered in the Republic of Ireland with registered number 398040 and registered office at 6th Floor, 2 Grand Canal Square, Dublin 2, Ireland

Industry Affiliations