#
Filter browser fingerprints
In this tutorial you will query the SearchFingerprints endpoint to retrieve candidate browser fingerprints, refine the results with filters (device type, OS family, browser product, version constraints), and pick one to use when creating a profile.
#
Prerequisites
- Completion of the Quickstart guide
- Kameleo app is running locally (default API base URL:
http://localhost:5050). - Network access to the local API port (no firewall blocking 5050).
#
Parameter reference
The SearchFingerprints endpoint accepts these optional parameters (all are filters; omit to broaden results):
Notes:
- Multiple comma-separated values perform a logical OR per field.
- Unspecified fields broaden the search and may increase diversity.
- The API returns an array of
FingerprintPreviewobjects (see API reference). Each preview contains enough metadata for choosing a candidate; you supply its attributes when creating a profile.
#
Basic search example
The endpoint always returns up to 25 matching items ordered by newest browser versions first. Repeating the same query yields a different random subset - cache or persist the one you pick if you need stability. Below you'll see how to fetch Windows Chrome fingerprints newer than version 135.
API rate limits
Each fingerprint search request counts toward your API quota. Avoid rapid polling loops; broaden filters or cache previously retrieved candidates instead of re-querying repeatedly. See the API rate limits page for details.
fingerprints = client.fingerprint.search_fingerprints(
device_type="desktop",
os_family="windows",
browser_product="chrome",
browser_version=">135",
)
if not fingerprints:
print("No fingerprints found; broaden filters (remove version or add more osFamily values).")
else:
fp = fingerprints[0]
print(f"Picked fingerprint: {fp.browser.product} {fp.browser.version} on {fp.os.family}")
const fingerprints = await client.fingerprint.searchFingerprints(
"desktop", // deviceType
"windows", // osFamily
"chrome", // browserProduct
">135", // browserVersion (comparator supported)
);
if (!fingerprints.length) {
console.log("No fingerprints found; try removing the version constraint.");
} else {
const fp = fingerprints[0];
console.log(`Picked fingerprint: ${fp.browser.product} ${fp.browser.version} on ${fp.os.family}`);
}
var fingerprints = await client.Fingerprint.SearchFingerprintsAsync(
"desktop", // deviceType
"windows", // osFamily
"chrome", // browserProduct
">135" // browserVersion
);
if (fingerprints.Count == 0)
{
Console.WriteLine("No fingerprints found; loosen your filters.");
}
else
{
var fp = fingerprints[0];
Console.WriteLine($"Picked fingerprint: {fp.Browser.Product} {fp.Browser.VarVersion} on {fp.Os.Family}");
}
#
Picking quality candidates
Follow these guidelines:
- Align
osFamily, proxy geo, and locale (e.g.windows+ US proxy +en-US) for coherent targeting. - Prefer current stable major versions (
chrome,edge) unless you have a site-specific requirement. - Avoid extremely old or rare combinations unless testing edge behavior.
- If you need mobile emulation, set
deviceType=mobileand constrainosFamilytoandroidorios+ a matching browser (Chrome for Android; Safari for iOS).
Version filtering
Start broad: query without browserVersion, inspect results, then narrow (e.g. add >135). Empty list? Remove comparator or lower the version.
#
Handling empty results
If a query returns zero fingerprints:
- Remove the
browserVersionfilter. - Drop to a single value in multi-value fields to reduce mutually exclusive combinations.
- Confirm spelling (
macos, notmacOS;osFamilynotplatform). - Try only
deviceTypefirst, then incrementally add filters.
Programmatically, detect empties and fallback to a broader search (e.g. call again without version).
#
Advanced multi-value queries
You can OR values inside a parameter:
fingerprints = client.fingerprint.search_fingerprints(
device_type="desktop",
os_family="windows,macos",
browser_product="chrome,edge",
)
const fingerprints = await client.fingerprint.searchFingerprints("desktop", "windows,macos", "chrome,edge");
var fingerprints = await client.Fingerprint.SearchFingerprintsAsync(
deviceType: "desktop",
osFamily: "windows,macos",
browserProduct: "chrome,edge"
);