# City List
Source: https://docs.2extract.com/data/cities
Countries with city-level targeting available. Select a country to view its full list of cities and parameter values.
City targeting (`-city-[slug]`) is available for the countries below. Requires
`-country-[code]` in the same username. See
[Geo Targeting](/proxy-products/configuration/geo-targeting) for the full parameter reference.
| Country | Cities |
| -------------------------------- | ------------------------------ |
| Afghanistan | [6 cities](/data/cities/af) |
| Albania | [24 cities](/data/cities/al) |
| Algeria | [120 cities](/data/cities/dz) |
| American Samoa | [2 cities](/data/cities/as) |
| Andorra | [3 cities](/data/cities/ad) |
| Angola | [9 cities](/data/cities/ao) |
| Antigua and Barbuda | [1 cities](/data/cities/ag) |
| Argentina | [526 cities](/data/cities/ar) |
| Armenia | [16 cities](/data/cities/am) |
| Australia | [220 cities](/data/cities/au) |
| Austria | [185 cities](/data/cities/at) |
| Azerbaijan | [5 cities](/data/cities/az) |
| Bahrain | [12 cities](/data/cities/bh) |
| Bangladesh | [88 cities](/data/cities/bd) |
| Barbados | [3 cities](/data/cities/bb) |
| Belarus | [27 cities](/data/cities/by) |
| Belgium | [439 cities](/data/cities/be) |
| Belize | [10 cities](/data/cities/bz) |
| Benin | [4 cities](/data/cities/bj) |
| Bermuda | [8 cities](/data/cities/bm) |
| Bhutan | [2 cities](/data/cities/bt) |
| Bolivia | [16 cities](/data/cities/bo) |
| Bosnia and Herzegovina | [79 cities](/data/cities/ba) |
| Botswana | [3 cities](/data/cities/bw) |
| Brazil | [2842 cities](/data/cities/br) |
| Brunei | [3 cities](/data/cities/bn) |
| Bulgaria | [211 cities](/data/cities/bg) |
| Burkina Faso | [2 cities](/data/cities/bf) |
| Burundi | [2 cities](/data/cities/bi) |
| Cambodia | [5 cities](/data/cities/kh) |
| Cameroon | [2 cities](/data/cities/cm) |
| Canada | [1307 cities](/data/cities/ca) |
| Cape Verde | [8 cities](/data/cities/cv) |
| Caribbean Netherlands | [2 cities](/data/cities/bq) |
| Central African Republic | [1 cities](/data/cities/cf) |
| Chad | [1 cities](/data/cities/td) |
| Chile | [198 cities](/data/cities/cl) |
| China | [477 cities](/data/cities/cn) |
| Colombia | [242 cities](/data/cities/co) |
| Comoros | [1 cities](/data/cities/km) |
| Costa Rica | [32 cities](/data/cities/cr) |
| Cote d'Ivoire | [6 cities](/data/cities/ci) |
| Croatia | [61 cities](/data/cities/hr) |
| Cuba | [5 cities](/data/cities/cu) |
| Cyprus | [7 cities](/data/cities/cy) |
| Czechia | [467 cities](/data/cities/cz) |
| Democratic Republic of the Congo | [4 cities](/data/cities/cd) |
| Denmark | [133 cities](/data/cities/dk) |
| Djibouti | [3 cities](/data/cities/dj) |
| Dominica | [3 cities](/data/cities/dm) |
| Dominican Republic | [51 cities](/data/cities/do) |
| Ecuador | [116 cities](/data/cities/ec) |
| Egypt | [117 cities](/data/cities/eg) |
| El Salvador | [10 cities](/data/cities/sv) |
| Equatorial Guinea | [3 cities](/data/cities/gq) |
| Eritrea | [1 cities](/data/cities/er) |
| Estonia | [40 cities](/data/cities/ee) |
| Eswatini | [4 cities](/data/cities/sz) |
| Ethiopia | [13 cities](/data/cities/et) |
| Fiji | [2 cities](/data/cities/fj) |
| Finland | [68 cities](/data/cities/fi) |
| France | [4086 cities](/data/cities/fr) |
| French Polynesia | [2 cities](/data/cities/pf) |
| Gabon | [1 cities](/data/cities/ga) |
| Georgia | [20 cities](/data/cities/ge) |
| Germany | [1773 cities](/data/cities/de) |
| Ghana | [7 cities](/data/cities/gh) |
| Greece | [106 cities](/data/cities/gr) |
| Greenland | [1 cities](/data/cities/gl) |
| Grenada | [6 cities](/data/cities/gd) |
| Guatemala | [9 cities](/data/cities/gt) |
| Guinea | [1 cities](/data/cities/gn) |
| Guinea-Bissau | [1 cities](/data/cities/gw) |
| Guyana | [4 cities](/data/cities/gy) |
| Haiti | [2 cities](/data/cities/ht) |
| Honduras | [26 cities](/data/cities/hn) |
| Hong Kong | [75 cities](/data/cities/hk) |
| Hungary | [347 cities](/data/cities/hu) |
| Iceland | [8 cities](/data/cities/is) |
| India | [1136 cities](/data/cities/in) |
| Indonesia | [234 cities](/data/cities/id) |
| Iran | [35 cities](/data/cities/ir) |
| Iraq | [26 cities](/data/cities/iq) |
| Ireland | [185 cities](/data/cities/ie) |
| Israel | [161 cities](/data/cities/il) |
| Italy | [1405 cities](/data/cities/it) |
| Jamaica | [19 cities](/data/cities/jm) |
| Japan | [1607 cities](/data/cities/jp) |
| Jordan | [8 cities](/data/cities/jo) |
| Kazakhstan | [48 cities](/data/cities/kz) |
| Kenya | [19 cities](/data/cities/ke) |
| Kiribati | [1 cities](/data/cities/ki) |
| Kuwait | [9 cities](/data/cities/kw) |
| Kyrgyzstan | [10 cities](/data/cities/kg) |
| Laos | [6 cities](/data/cities/la) |
| Latvia | [34 cities](/data/cities/lv) |
| Lebanon | [19 cities](/data/cities/lb) |
| Lesotho | [1 cities](/data/cities/ls) |
| Liberia | [1 cities](/data/cities/lr) |
| Libya | [5 cities](/data/cities/ly) |
| Liechtenstein | [2 cities](/data/cities/li) |
| Lithuania | [50 cities](/data/cities/lt) |
| Luxembourg | [7 cities](/data/cities/lu) |
| Malawi | [2 cities](/data/cities/mw) |
| Malaysia | [144 cities](/data/cities/my) |
| Maldives | [2 cities](/data/cities/mv) |
| Mali | [2 cities](/data/cities/ml) |
| Malta | [48 cities](/data/cities/mt) |
| Marshall Islands | [1 cities](/data/cities/mh) |
| Mauritius | [33 cities](/data/cities/mu) |
| Mexico | [573 cities](/data/cities/mx) |
| Moldova | [84 cities](/data/cities/md) |
| Mongolia | [2 cities](/data/cities/mn) |
| Montenegro | [12 cities](/data/cities/me) |
| Morocco | [50 cities](/data/cities/ma) |
| Mozambique | [8 cities](/data/cities/mz) |
| Myanmar (Burma) | [10 cities](/data/cities/mm) |
| Namibia | [9 cities](/data/cities/na) |
| Nauru | [1 cities](/data/cities/nr) |
| Nepal | [30 cities](/data/cities/np) |
| Netherlands | [567 cities](/data/cities/nl) |
| New Caledonia | [3 cities](/data/cities/nc) |
| New Zealand | [47 cities](/data/cities/nz) |
| Nicaragua | [5 cities](/data/cities/ni) |
| Niger | [2 cities](/data/cities/ne) |
| Nigeria | [15 cities](/data/cities/ng) |
| North Macedonia | [30 cities](/data/cities/mk) |
| Northern Mariana Islands | [1 cities](/data/cities/mp) |
| Norway | [192 cities](/data/cities/no) |
| Oman | [11 cities](/data/cities/om) |
| Pakistan | [123 cities](/data/cities/pk) |
| Palau | [3 cities](/data/cities/pw) |
| Palestine | [10 cities](/data/cities/ps) |
| Panama | [3 cities](/data/cities/pa) |
| Papua New Guinea | [1 cities](/data/cities/pg) |
| Paraguay | [33 cities](/data/cities/py) |
| Peru | [98 cities](/data/cities/pe) |
| Philippines | [344 cities](/data/cities/ph) |
| Poland | [962 cities](/data/cities/pl) |
| Portugal | [412 cities](/data/cities/pt) |
| Qatar | [2 cities](/data/cities/qa) |
| Republic of the Congo | [5 cities](/data/cities/cg) |
| Romania | [219 cities](/data/cities/ro) |
| Russia | [1768 cities](/data/cities/ru) |
| Rwanda | [3 cities](/data/cities/rw) |
| Saint Kitts and Nevis | [3 cities](/data/cities/kn) |
| Saint Lucia | [4 cities](/data/cities/lc) |
| Saint Pierre and Miquelon | [1 cities](/data/cities/pm) |
| Saint Vincent and the Grenadines | [1 cities](/data/cities/vc) |
| Samoa | [1 cities](/data/cities/ws) |
| San Marino | [2 cities](/data/cities/sm) |
| Sao Tome and Principe | [1 cities](/data/cities/st) |
| Saudi Arabia | [26 cities](/data/cities/sa) |
| Senegal | [6 cities](/data/cities/sn) |
| Serbia | [112 cities](/data/cities/rs) |
| Seychelles | [1 cities](/data/cities/sc) |
| Sierra Leone | [1 cities](/data/cities/sl) |
| Slovakia | [248 cities](/data/cities/sk) |
| Slovenia | [77 cities](/data/cities/si) |
| Solomon Islands | [1 cities](/data/cities/sb) |
| Somalia | [6 cities](/data/cities/so) |
| South Africa | [146 cities](/data/cities/za) |
| South Korea | [272 cities](/data/cities/kr) |
| South Sudan | [3 cities](/data/cities/ss) |
| Spain | [1577 cities](/data/cities/es) |
| Sri Lanka | [38 cities](/data/cities/lk) |
| Sudan | [2 cities](/data/cities/sd) |
| Suriname | [5 cities](/data/cities/sr) |
| Sweden | [189 cities](/data/cities/se) |
| Switzerland | [207 cities](/data/cities/ch) |
| Syria | [5 cities](/data/cities/sy) |
| Tadjikistan | [5 cities](/data/cities/tj) |
| Taiwan | [183 cities](/data/cities/tw) |
| Tanzania | [12 cities](/data/cities/tz) |
| Thailand | [240 cities](/data/cities/th) |
| The Bahamas | [7 cities](/data/cities/bs) |
| The Gambia | [3 cities](/data/cities/gm) |
| Timor-Leste | [1 cities](/data/cities/tl) |
| Togo | [2 cities](/data/cities/tg) |
| Tonga | [1 cities](/data/cities/to) |
| Trinidad and Tobago | [42 cities](/data/cities/tt) |
| Tunisia | [79 cities](/data/cities/tn) |
| Turkey | [409 cities](/data/cities/tr) |
| Turkmenistan | [3 cities](/data/cities/tm) |
| U.S. Virgin Islands | [3 cities](/data/cities/vi) |
| Uganda | [1 cities](/data/cities/ug) |
| Ukraine | [404 cities](/data/cities/ua) |
| United Arab Emirates | [9 cities](/data/cities/ae) |
| United Kingdom | [1486 cities](/data/cities/gb) |
| United States | [9024 cities](/data/cities/us) |
| Uruguay | [35 cities](/data/cities/uy) |
| Uzbekistan | [10 cities](/data/cities/uz) |
| Vanuatu | [1 cities](/data/cities/vu) |
| Venezuela | [79 cities](/data/cities/ve) |
| Vietnam | [186 cities](/data/cities/vn) |
| Wallis and Futuna | [1 cities](/data/cities/wf) |
| Yemen | [4 cities](/data/cities/ye) |
| Zambia | [1 cities](/data/cities/zm) |
| Zimbabwe | [1 cities](/data/cities/zw) |
# Country List
Source: https://docs.2extract.com/data/countries
Full list of countries available for geo-targeting, with the parameter value to use in the proxy connection username.
Use the value from the **Parameter** column as the `[code]` in `-country-[code]` when building
your proxy connection username. See [Geo Targeting](/proxy-products/configuration/geo-targeting)
for the full parameter reference.
| Country | Parameter (`-country-`) |
| -------------------------------------------- | ----------------------- |
| Afghanistan | `af` |
| Aland Islands | `ax` |
| Albania | `al` |
| Algeria | `dz` |
| American Samoa | `as` |
| Andorra | `ad` |
| Angola | `ao` |
| Anguilla | `ai` |
| Antarctica | `aq` |
| Antigua and Barbuda | `ag` |
| Argentina | `ar` |
| Armenia | `am` |
| Aruba | `aw` |
| Australia | `au` |
| Austria | `at` |
| Azerbaijan | `az` |
| Bahrain | `bh` |
| Bangladesh | `bd` |
| Barbados | `bb` |
| Belarus | `by` |
| Belgium | `be` |
| Belize | `bz` |
| Benin | `bj` |
| Bermuda | `bm` |
| Bhutan | `bt` |
| Bolivia | `bo` |
| Bosnia and Herzegovina | `ba` |
| Botswana | `bw` |
| Bouvet Island | `bv` |
| Brazil | `br` |
| British Indian Ocean Territory | `io` |
| British Virgin Islands | `vg` |
| Brunei | `bn` |
| Bulgaria | `bg` |
| Burkina Faso | `bf` |
| Burundi | `bi` |
| Cambodia | `kh` |
| Cameroon | `cm` |
| Canada | `ca` |
| Cape Verde | `cv` |
| Caribbean Netherlands | `bq` |
| Cayman Islands | `ky` |
| Central African Republic | `cf` |
| Chad | `td` |
| Chile | `cl` |
| China | `cn` |
| Christmas Island | `cx` |
| Cocos (Keeling) Islands | `cc` |
| Colombia | `co` |
| Comoros | `km` |
| Cook Islands | `ck` |
| Costa Rica | `cr` |
| Cote d'Ivoire | `ci` |
| Croatia | `hr` |
| Cuba | `cu` |
| Curacao | `cw` |
| Cyprus | `cy` |
| Czechia | `cz` |
| Democratic Republic of the Congo | `cd` |
| Denmark | `dk` |
| Djibouti | `dj` |
| Dominica | `dm` |
| Dominican Republic | `do` |
| Ecuador | `ec` |
| Egypt | `eg` |
| El Salvador | `sv` |
| England | `en` |
| Equatorial Guinea | `gq` |
| Eritrea | `er` |
| Estonia | `ee` |
| Eswatini | `sz` |
| Ethiopia | `et` |
| Falkland Islands (Islas Malvinas) | `fk` |
| Faroe Islands | `fo` |
| Fiji | `fj` |
| Finland | `fi` |
| France | `fr` |
| French Guiana | `gf` |
| French Polynesia | `pf` |
| French Southern and Antarctic Lands | `tf` |
| Gabon | `ga` |
| Georgia | `ge` |
| Germany | `de` |
| Ghana | `gh` |
| Gibraltar | `gi` |
| Greece | `gr` |
| Greenland | `gl` |
| Grenada | `gd` |
| Guadeloupe | `gp` |
| Guam | `gu` |
| Guatemala | `gt` |
| Guernsey | `gg` |
| Guinea | `gn` |
| Guinea-Bissau | `gw` |
| Guyana | `gy` |
| Haiti | `ht` |
| Heard Island and McDonald Islands | `hm` |
| Honduras | `hn` |
| Hong Kong | `hk` |
| Hungary | `hu` |
| Iceland | `is` |
| India | `in` |
| Indonesia | `id` |
| Iran | `ir` |
| Iraq | `iq` |
| Ireland | `ie` |
| Isle of Man | `im` |
| Israel | `il` |
| Italy | `it` |
| Jamaica | `jm` |
| Japan | `jp` |
| Jersey | `je` |
| Jordan | `jo` |
| Kazakhstan | `kz` |
| Kenya | `ke` |
| Kiribati | `ki` |
| Kosovo | `xk` |
| Kuwait | `kw` |
| Kyrgyzstan | `kg` |
| Laos | `la` |
| Latvia | `lv` |
| Lebanon | `lb` |
| Lesotho | `ls` |
| Liberia | `lr` |
| Libya | `ly` |
| Liechtenstein | `li` |
| Lithuania | `lt` |
| Luxembourg | `lu` |
| Macao | `mo` |
| Madagascar | `mg` |
| Malawi | `mw` |
| Malaysia | `my` |
| Maldives | `mv` |
| Mali | `ml` |
| Malta | `mt` |
| Marshall Islands | `mh` |
| Martinique | `mq` |
| Mauritania | `mr` |
| Mauritius | `mu` |
| Mayotte | `yt` |
| Mexico | `mx` |
| Micronesia | `fm` |
| Moldova | `md` |
| Monaco | `mc` |
| Mongolia | `mn` |
| Montenegro | `me` |
| Montserrat | `ms` |
| Morocco | `ma` |
| Mozambique | `mz` |
| Myanmar (Burma) | `mm` |
| Namibia | `na` |
| Nauru | `nr` |
| Nepal | `np` |
| Netherlands | `nl` |
| New Caledonia | `nc` |
| New Zealand | `nz` |
| Nicaragua | `ni` |
| Niger | `ne` |
| Nigeria | `ng` |
| Niue | `nu` |
| Norfolk Island | `nf` |
| North Korea | `kp` |
| North Macedonia | `mk` |
| Northern Mariana Islands | `mp` |
| Norway | `no` |
| Oman | `om` |
| Pakistan | `pk` |
| Palau | `pw` |
| Palestine | `ps` |
| Panama | `pa` |
| Papua New Guinea | `pg` |
| Paraguay | `py` |
| Peru | `pe` |
| Philippines | `ph` |
| Pitcairn Islands | `pn` |
| Poland | `pl` |
| Portugal | `pt` |
| Puerto Rico | `pr` |
| Qatar | `qa` |
| Republic of the Congo | `cg` |
| Reunion | `re` |
| Romania | `ro` |
| Russia | `ru` |
| Rwanda | `rw` |
| Saint Barthelemy | `bl` |
| Saint Kitts and Nevis | `kn` |
| Saint Lucia | `lc` |
| Saint Martin | `mf` |
| Saint Pierre and Miquelon | `pm` |
| Saint Vincent and the Grenadines | `vc` |
| Samoa | `ws` |
| San Marino | `sm` |
| Sao Tome and Principe | `st` |
| Saudi Arabia | `sa` |
| Senegal | `sn` |
| Serbia | `rs` |
| Seychelles | `sc` |
| Sierra Leone | `sl` |
| Singapore | `sg` |
| Sint Maarten | `sx` |
| Slovakia | `sk` |
| Slovenia | `si` |
| Solomon Islands | `sb` |
| Somalia | `so` |
| South Africa | `za` |
| South Georgia and the South Sandwich Islands | `gs` |
| South Korea | `kr` |
| South Sudan | `ss` |
| Spain | `es` |
| Sri Lanka | `lk` |
| Sudan | `sd` |
| Suriname | `sr` |
| Svalbard and Jan Mayen | `sj` |
| Sweden | `se` |
| Switzerland | `ch` |
| Syria | `sy` |
| Tadjikistan | `tj` |
| Taiwan | `tw` |
| Tanzania | `tz` |
| Thailand | `th` |
| The Bahamas | `bs` |
| The Gambia | `gm` |
| Timor-Leste | `tl` |
| Togo | `tg` |
| Tokelau | `tk` |
| Tonga | `to` |
| Trinidad and Tobago | `tt` |
| Tunisia | `tn` |
| Turkey | `tr` |
| Turkmenistan | `tm` |
| Turks and Caicos Islands | `tc` |
| Tuvalu | `tv` |
| U.S. Virgin Islands | `vi` |
| Uganda | `ug` |
| Ukraine | `ua` |
| United Arab Emirates | `ae` |
| United Kingdom | `gb` |
| United States | `us` |
| Uruguay | `uy` |
| Uzbekistan | `uz` |
| Vanuatu | `vu` |
| Vatican City | `va` |
| Venezuela | `ve` |
| Vietnam | `vn` |
| Wallis and Futuna | `wf` |
| Western Sahara | `eh` |
| Yemen | `ye` |
| Zambia | `zm` |
| Zimbabwe | `zw` |
# ISP List
Source: https://docs.2extract.com/data/isp
Mobile ISP/carrier catalog for -isp- targeting (mobile proxies only). Browse alphabetically.
ISP targeting (`-isp-[code]`) selects a specific mobile carrier network. Available on **mobile
proxies only**, and mutually exclusive with all geographic parameters (`-country`, `-state`,
`-city`, `-zip`). See [Geo Targeting](/proxy-products/configuration/geo-targeting) for the full
parameter reference.
| Group | Entries |
| ----- | ----------------------------- |
| A | [9348 entries](/data/isp/a) |
| B | [4841 entries](/data/isp/b) |
| C | [9570 entries](/data/isp/c) |
| D | [4575 entries](/data/isp/d) |
| E | [4052 entries](/data/isp/e) |
| F | [4221 entries](/data/isp/f) |
| G | [4193 entries](/data/isp/g) |
| H | [3063 entries](/data/isp/h) |
| I | [6463 entries](/data/isp/i) |
| J | [2054 entries](/data/isp/j) |
| K | [2579 entries](/data/isp/k) |
| L | [4328 entries](/data/isp/l) |
| M | [6797 entries](/data/isp/m) |
| N | [6061 entries](/data/isp/n) |
| O | [2842 entries](/data/isp/o) |
| P | [7605 entries](/data/isp/p) |
| Q | [483 entries](/data/isp/q) |
| R | [3916 entries](/data/isp/r) |
| S | [10781 entries](/data/isp/s) |
| T | [6786 entries](/data/isp/t) |
| U | [2920 entries](/data/isp/u) |
| V | [3192 entries](/data/isp/v) |
| W | [3081 entries](/data/isp/w) |
| X | [446 entries](/data/isp/x) |
| Y | [543 entries](/data/isp/y) |
| Z | [893 entries](/data/isp/z) |
| 0-9 | [818 entries](/data/isp/0-9) |
| Other | [55 entries](/data/isp/other) |
# State List
Source: https://docs.2extract.com/data/states
Countries with region/state-level targeting available. Select a country to view its full list of regions and parameter values.
Region/state targeting (`-state-[slug]`) is available for the countries below. Requires
`-country-[code]` in the same username. See
[Geo Targeting](/proxy-products/configuration/geo-targeting) for the full parameter reference.
| Country | Regions |
| -------------------------------- | -------------------------------- |
| Afghanistan | [6 region(s)](/data/regions/af) |
| Albania | [12 region(s)](/data/regions/al) |
| Algeria | [42 region(s)](/data/regions/dz) |
| American Samoa | [2 region(s)](/data/regions/as) |
| Andorra | [2 region(s)](/data/regions/ad) |
| Angola | [8 region(s)](/data/regions/ao) |
| Antigua and Barbuda | [1 region(s)](/data/regions/ag) |
| Argentina | [24 region(s)](/data/regions/ar) |
| Armenia | [8 region(s)](/data/regions/am) |
| Australia | [8 region(s)](/data/regions/au) |
| Austria | [9 region(s)](/data/regions/at) |
| Azerbaijan | [6 region(s)](/data/regions/az) |
| Bahrain | [4 region(s)](/data/regions/bh) |
| Bangladesh | [8 region(s)](/data/regions/bd) |
| Barbados | [3 region(s)](/data/regions/bb) |
| Belarus | [7 region(s)](/data/regions/by) |
| Belgium | [3 region(s)](/data/regions/be) |
| Belize | [5 region(s)](/data/regions/bz) |
| Benin | [4 region(s)](/data/regions/bj) |
| Bermuda | [7 region(s)](/data/regions/bm) |
| Bhutan | [2 region(s)](/data/regions/bt) |
| Bolivia | [9 region(s)](/data/regions/bo) |
| Bosnia and Herzegovina | [3 region(s)](/data/regions/ba) |
| Botswana | [3 region(s)](/data/regions/bw) |
| Brazil | [27 region(s)](/data/regions/br) |
| Brunei | [2 region(s)](/data/regions/bn) |
| Bulgaria | [28 region(s)](/data/regions/bg) |
| Burkina Faso | [2 region(s)](/data/regions/bf) |
| Burundi | [2 region(s)](/data/regions/bi) |
| Cambodia | [4 region(s)](/data/regions/kh) |
| Cameroon | [2 region(s)](/data/regions/cm) |
| Canada | [13 region(s)](/data/regions/ca) |
| Cape Verde | [7 region(s)](/data/regions/cv) |
| Caribbean Netherlands | [3 region(s)](/data/regions/bq) |
| Central African Republic | [1 region(s)](/data/regions/cf) |
| Chad | [1 region(s)](/data/regions/td) |
| Chile | [16 region(s)](/data/regions/cl) |
| China | [31 region(s)](/data/regions/cn) |
| Colombia | [30 region(s)](/data/regions/co) |
| Comoros | [1 region(s)](/data/regions/km) |
| Costa Rica | [6 region(s)](/data/regions/cr) |
| Cote d'Ivoire | [3 region(s)](/data/regions/ci) |
| Croatia | [20 region(s)](/data/regions/hr) |
| Cuba | [5 region(s)](/data/regions/cu) |
| Cyprus | [5 region(s)](/data/regions/cy) |
| Czechia | [14 region(s)](/data/regions/cz) |
| Democratic Republic of the Congo | [4 region(s)](/data/regions/cd) |
| Denmark | [5 region(s)](/data/regions/dk) |
| Djibouti | [3 region(s)](/data/regions/dj) |
| Dominica | [3 region(s)](/data/regions/dm) |
| Dominican Republic | [28 region(s)](/data/regions/do) |
| Ecuador | [24 region(s)](/data/regions/ec) |
| Egypt | [25 region(s)](/data/regions/eg) |
| El Salvador | [6 region(s)](/data/regions/sv) |
| Equatorial Guinea | [3 region(s)](/data/regions/gq) |
| Eritrea | [1 region(s)](/data/regions/er) |
| Estonia | [15 region(s)](/data/regions/ee) |
| Eswatini | [3 region(s)](/data/regions/sz) |
| Ethiopia | [9 region(s)](/data/regions/et) |
| Fiji | [2 region(s)](/data/regions/fj) |
| Finland | [18 region(s)](/data/regions/fi) |
| France | [13 region(s)](/data/regions/fr) |
| French Polynesia | [1 region(s)](/data/regions/pf) |
| Gabon | [1 region(s)](/data/regions/ga) |
| Georgia | [9 region(s)](/data/regions/ge) |
| Germany | [16 region(s)](/data/regions/de) |
| Ghana | [4 region(s)](/data/regions/gh) |
| Greece | [13 region(s)](/data/regions/gr) |
| Greenland | [1 region(s)](/data/regions/gl) |
| Grenada | [5 region(s)](/data/regions/gd) |
| Guatemala | [8 region(s)](/data/regions/gt) |
| Guinea | [1 region(s)](/data/regions/gn) |
| Guinea-Bissau | [1 region(s)](/data/regions/gw) |
| Guyana | [3 region(s)](/data/regions/gy) |
| Haiti | [2 region(s)](/data/regions/ht) |
| Honduras | [13 region(s)](/data/regions/hn) |
| Hong Kong | [18 region(s)](/data/regions/hk) |
| Hungary | [20 region(s)](/data/regions/hu) |
| Iceland | [5 region(s)](/data/regions/is) |
| India | [35 region(s)](/data/regions/in) |
| Indonesia | [34 region(s)](/data/regions/id) |
| Iran | [23 region(s)](/data/regions/ir) |
| Iraq | [18 region(s)](/data/regions/iq) |
| Ireland | [4 region(s)](/data/regions/ie) |
| Israel | [6 region(s)](/data/regions/il) |
| Italy | [20 region(s)](/data/regions/it) |
| Jamaica | [11 region(s)](/data/regions/jm) |
| Japan | [47 region(s)](/data/regions/jp) |
| Jordan | [7 region(s)](/data/regions/jo) |
| Kazakhstan | [20 region(s)](/data/regions/kz) |
| Kenya | [17 region(s)](/data/regions/ke) |
| Kiribati | [1 region(s)](/data/regions/ki) |
| Kuwait | [4 region(s)](/data/regions/kw) |
| Kyrgyzstan | [6 region(s)](/data/regions/kg) |
| Laos | [6 region(s)](/data/regions/la) |
| Latvia | [28 region(s)](/data/regions/lv) |
| Lebanon | [7 region(s)](/data/regions/lb) |
| Lesotho | [1 region(s)](/data/regions/ls) |
| Liberia | [1 region(s)](/data/regions/lr) |
| Libya | [5 region(s)](/data/regions/ly) |
| Liechtenstein | [2 region(s)](/data/regions/li) |
| Lithuania | [10 region(s)](/data/regions/lt) |
| Luxembourg | [4 region(s)](/data/regions/lu) |
| Malawi | [2 region(s)](/data/regions/mw) |
| Malaysia | [16 region(s)](/data/regions/my) |
| Maldives | [3 region(s)](/data/regions/mv) |
| Mali | [2 region(s)](/data/regions/ml) |
| Malta | [47 region(s)](/data/regions/mt) |
| Marshall Islands | [1 region(s)](/data/regions/mh) |
| Mauritania | [1 region(s)](/data/regions/mr) |
| Mauritius | [10 region(s)](/data/regions/mu) |
| Mexico | [32 region(s)](/data/regions/mx) |
| Moldova | [37 region(s)](/data/regions/md) |
| Mongolia | [2 region(s)](/data/regions/mn) |
| Montenegro | [12 region(s)](/data/regions/me) |
| Morocco | [8 region(s)](/data/regions/ma) |
| Mozambique | [8 region(s)](/data/regions/mz) |
| Myanmar (Burma) | [7 region(s)](/data/regions/mm) |
| Namibia | [6 region(s)](/data/regions/na) |
| Nauru | [1 region(s)](/data/regions/nr) |
| Nepal | [7 region(s)](/data/regions/np) |
| Netherlands | [12 region(s)](/data/regions/nl) |
| New Caledonia | [2 region(s)](/data/regions/nc) |
| New Zealand | [15 region(s)](/data/regions/nz) |
| Nicaragua | [5 region(s)](/data/regions/ni) |
| Niger | [2 region(s)](/data/regions/ne) |
| Nigeria | [10 region(s)](/data/regions/ng) |
| North Macedonia | [31 region(s)](/data/regions/mk) |
| Northern Mariana Islands | [1 region(s)](/data/regions/mp) |
| Norway | [15 region(s)](/data/regions/no) |
| Oman | [5 region(s)](/data/regions/om) |
| Pakistan | [7 region(s)](/data/regions/pk) |
| Palau | [3 region(s)](/data/regions/pw) |
| Palestine | [9 region(s)](/data/regions/ps) |
| Panama | [2 region(s)](/data/regions/pa) |
| Papua New Guinea | [1 region(s)](/data/regions/pg) |
| Paraguay | [12 region(s)](/data/regions/py) |
| Peru | [25 region(s)](/data/regions/pe) |
| Philippines | [17 region(s)](/data/regions/ph) |
| Poland | [16 region(s)](/data/regions/pl) |
| Portugal | [20 region(s)](/data/regions/pt) |
| Qatar | [2 region(s)](/data/regions/qa) |
| Republic of the Congo | [5 region(s)](/data/regions/cg) |
| Romania | [42 region(s)](/data/regions/ro) |
| Russia | [82 region(s)](/data/regions/ru) |
| Rwanda | [2 region(s)](/data/regions/rw) |
| Saint Kitts and Nevis | [3 region(s)](/data/regions/kn) |
| Saint Lucia | [4 region(s)](/data/regions/lc) |
| Saint Pierre and Miquelon | [1 region(s)](/data/regions/pm) |
| Saint Vincent and the Grenadines | [1 region(s)](/data/regions/vc) |
| Samoa | [1 region(s)](/data/regions/ws) |
| San Marino | [2 region(s)](/data/regions/sm) |
| Sao Tome and Principe | [1 region(s)](/data/regions/st) |
| Saudi Arabia | [12 region(s)](/data/regions/sa) |
| Senegal | [2 region(s)](/data/regions/sn) |
| Serbia | [19 region(s)](/data/regions/rs) |
| Seychelles | [1 region(s)](/data/regions/sc) |
| Sierra Leone | [1 region(s)](/data/regions/sl) |
| Slovakia | [8 region(s)](/data/regions/sk) |
| Slovenia | [71 region(s)](/data/regions/si) |
| Solomon Islands | [1 region(s)](/data/regions/sb) |
| Somalia | [6 region(s)](/data/regions/so) |
| South Africa | [9 region(s)](/data/regions/za) |
| South Korea | [17 region(s)](/data/regions/kr) |
| South Sudan | [3 region(s)](/data/regions/ss) |
| Spain | [19 region(s)](/data/regions/es) |
| Sri Lanka | [6 region(s)](/data/regions/lk) |
| Sudan | [2 region(s)](/data/regions/sd) |
| Suriname | [4 region(s)](/data/regions/sr) |
| Sweden | [21 region(s)](/data/regions/se) |
| Switzerland | [21 region(s)](/data/regions/ch) |
| Syria | [5 region(s)](/data/regions/sy) |
| Tadjikistan | [4 region(s)](/data/regions/tj) |
| Taiwan | [21 region(s)](/data/regions/tw) |
| Tanzania | [12 region(s)](/data/regions/tz) |
| Thailand | [75 region(s)](/data/regions/th) |
| The Bahamas | [7 region(s)](/data/regions/bs) |
| The Gambia | [2 region(s)](/data/regions/gm) |
| Timor-Leste | [1 region(s)](/data/regions/tl) |
| Togo | [2 region(s)](/data/regions/tg) |
| Tonga | [1 region(s)](/data/regions/to) |
| Trinidad and Tobago | [15 region(s)](/data/regions/tt) |
| Tunisia | [22 region(s)](/data/regions/tn) |
| Turkey | [79 region(s)](/data/regions/tr) |
| Turkmenistan | [3 region(s)](/data/regions/tm) |
| U.S. Virgin Islands | [2 region(s)](/data/regions/vi) |
| Uganda | [1 region(s)](/data/regions/ug) |
| Ukraine | [27 region(s)](/data/regions/ua) |
| United Arab Emirates | [7 region(s)](/data/regions/ae) |
| United Kingdom | [4 region(s)](/data/regions/gb) |
| United States | [51 region(s)](/data/regions/us) |
| Uruguay | [12 region(s)](/data/regions/uy) |
| Uzbekistan | [8 region(s)](/data/regions/uz) |
| Vanuatu | [1 region(s)](/data/regions/vu) |
| Venezuela | [23 region(s)](/data/regions/ve) |
| Vietnam | [60 region(s)](/data/regions/vn) |
| Wallis and Futuna | [1 region(s)](/data/regions/wf) |
| Yemen | [4 region(s)](/data/regions/ye) |
| Zambia | [1 region(s)](/data/regions/zm) |
| Zimbabwe | [1 region(s)](/data/regions/zw) |
# ZIP Code List
Source: https://docs.2extract.com/data/zips
Countries with ZIP/postal code targeting available. Select a country to view its codes.
ZIP targeting (`-zip-[code]`) is available for the countries below. Requires `-country-[code]`
in the same username. Large countries link to the live lookup API instead of a static table. See
[Geo Targeting](/proxy-products/configuration/geo-targeting) for the full parameter reference.
| Country | ZIP Codes |
| -------------------------------- | --------------------------------- |
| Afghanistan | [12 codes](/data/zips/af) |
| Aland Islands | [2 codes](/data/zips/ax) |
| Albania | [42 codes](/data/zips/al) |
| Algeria | [832 — via API](/data/zips/dz) |
| American Samoa | [2 codes](/data/zips/as) |
| Andorra | [3 codes](/data/zips/ad) |
| Angola | [3 codes](/data/zips/ao) |
| Argentina | [2,576 — via API](/data/zips/ar) |
| Armenia | [50 codes](/data/zips/am) |
| Australia | [8,608 — via API](/data/zips/au) |
| Austria | [4,824 — via API](/data/zips/at) |
| Azerbaijan | [64 codes](/data/zips/az) |
| Bahrain | [4 codes](/data/zips/bh) |
| Bangladesh | [665 — via API](/data/zips/bd) |
| Barbados | [2 codes](/data/zips/bb) |
| Belarus | [288 codes](/data/zips/by) |
| Belgium | [3,390 — via API](/data/zips/be) |
| Belize | [2 codes](/data/zips/bz) |
| Bermuda | [8 codes](/data/zips/bm) |
| Bhutan | [2 codes](/data/zips/bt) |
| Bolivia | [12 codes](/data/zips/bo) |
| Bosnia and Herzegovina | [36 codes](/data/zips/ba) |
| Brazil | [9,792 — via API](/data/zips/br) |
| British Indian Ocean Territory | [1 codes](/data/zips/io) |
| British Virgin Islands | [2 codes](/data/zips/vg) |
| Brunei | [7 codes](/data/zips/bn) |
| Bulgaria | [1,504 — via API](/data/zips/bg) |
| Cambodia | [28 codes](/data/zips/kh) |
| Cameroon | [1 codes](/data/zips/cm) |
| Canada | [7,727 — via API](/data/zips/ca) |
| Cape Verde | [1 codes](/data/zips/cv) |
| Cayman Islands | [8 codes](/data/zips/ky) |
| Chile | [130 codes](/data/zips/cl) |
| China | [160 codes](/data/zips/cn) |
| Colombia | [2,789 — via API](/data/zips/co) |
| Cook Islands | [1 codes](/data/zips/ck) |
| Costa Rica | [657 — via API](/data/zips/cr) |
| Cote d'Ivoire | [3 codes](/data/zips/ci) |
| Croatia | [1,020 — via API](/data/zips/hr) |
| Cuba | [2 codes](/data/zips/cu) |
| Curacao | [1 codes](/data/zips/cw) |
| Cyprus | [40 codes](/data/zips/cy) |
| Czechia | [6,331 — via API](/data/zips/cz) |
| Democratic Republic of the Congo | [5 codes](/data/zips/cd) |
| Denmark | [1,446 — via API](/data/zips/dk) |
| Djibouti | [2 codes](/data/zips/dj) |
| Dominica | [2 codes](/data/zips/dm) |
| Dominican Republic | [436 codes](/data/zips/do) |
| Ecuador | [336 codes](/data/zips/ec) |
| Egypt | [28 codes](/data/zips/eg) |
| El Salvador | [17 codes](/data/zips/sv) |
| Eritrea | [1 codes](/data/zips/er) |
| Estonia | [42 codes](/data/zips/ee) |
| Eswatini | [1 codes](/data/zips/sz) |
| Ethiopia | [2 codes](/data/zips/et) |
| Faroe Islands | [4 codes](/data/zips/fo) |
| Fiji | [3 codes](/data/zips/fj) |
| Finland | [2,470 — via API](/data/zips/fi) |
| France | [42,986 — via API](/data/zips/fr) |
| French Guiana | [18 codes](/data/zips/gf) |
| French Polynesia | [1 codes](/data/zips/pf) |
| Gabon | [1 codes](/data/zips/ga) |
| Georgia | [28 codes](/data/zips/ge) |
| Germany | [17,042 — via API](/data/zips/de) |
| Ghana | [7 codes](/data/zips/gh) |
| Gibraltar | [6 codes](/data/zips/gi) |
| Greece | [130 codes](/data/zips/gr) |
| Greenland | [2 codes](/data/zips/gl) |
| Guadeloupe | [48 codes](/data/zips/gp) |
| Guam | [28 codes](/data/zips/gu) |
| Guatemala | [139 codes](/data/zips/gt) |
| Guernsey | [7 codes](/data/zips/gg) |
| Guinea | [1 codes](/data/zips/gn) |
| Guyana | [1 codes](/data/zips/gy) |
| Haiti | [2 codes](/data/zips/ht) |
| Honduras | [36 codes](/data/zips/hn) |
| Hong Kong | [93 codes](/data/zips/hk) |
| Hungary | [2,973 — via API](/data/zips/hu) |
| Iceland | [177 codes](/data/zips/is) |
| India | [13,420 — via API](/data/zips/in) |
| Indonesia | [4,527 — via API](/data/zips/id) |
| Iran | [59 codes](/data/zips/ir) |
| Iraq | [72 codes](/data/zips/iq) |
| Ireland | [1,614 — via API](/data/zips/ie) |
| Isle of Man | [8 codes](/data/zips/im) |
| Israel | [179 codes](/data/zips/il) |
| Italy | [13,641 — via API](/data/zips/it) |
| Jamaica | [5 codes](/data/zips/jm) |
| Japan | [16,750 — via API](/data/zips/jp) |
| Jersey | [13 codes](/data/zips/je) |
| Jordan | [23 codes](/data/zips/jo) |
| Kazakhstan | [107 codes](/data/zips/kz) |
| Kenya | [44 codes](/data/zips/ke) |
| Kosovo | [11 codes](/data/zips/xk) |
| Kuwait | [4 codes](/data/zips/kw) |
| Kyrgyzstan | [26 codes](/data/zips/kg) |
| Laos | [8 codes](/data/zips/la) |
| Latvia | [501 — via API](/data/zips/lv) |
| Lebanon | [33 codes](/data/zips/lb) |
| Lesotho | [1 codes](/data/zips/ls) |
| Liberia | [2 codes](/data/zips/lr) |
| Libya | [8 codes](/data/zips/ly) |
| Liechtenstein | [20 codes](/data/zips/li) |
| Lithuania | [959 — via API](/data/zips/lt) |
| Luxembourg | [369 codes](/data/zips/lu) |
| Macao | [8 codes](/data/zips/mo) |
| Madagascar | [1 codes](/data/zips/mg) |
| Malawi | [3 codes](/data/zips/mw) |
| Malaysia | [1,493 — via API](/data/zips/my) |
| Maldives | [3 codes](/data/zips/mv) |
| Mali | [1 codes](/data/zips/ml) |
| Malta | [122 codes](/data/zips/mt) |
| Marshall Islands | [2 codes](/data/zips/mh) |
| Martinique | [44 codes](/data/zips/mq) |
| Mauritania | [1 codes](/data/zips/mr) |
| Mauritius | [9 codes](/data/zips/mu) |
| Mayotte | [40 codes](/data/zips/yt) |
| Mexico | [19,579 — via API](/data/zips/mx) |
| Micronesia | [1 codes](/data/zips/fm) |
| Moldova | [461 codes](/data/zips/md) |
| Monaco | [2 codes](/data/zips/mc) |
| Mongolia | [9 codes](/data/zips/mn) |
| Montenegro | [3 codes](/data/zips/me) |
| Morocco | [20 codes](/data/zips/ma) |
| Mozambique | [6 codes](/data/zips/mz) |
| Myanmar (Burma) | [34 codes](/data/zips/mm) |
| Namibia | [2 codes](/data/zips/na) |
| Nepal | [17 codes](/data/zips/np) |
| Netherlands | [4,643 — via API](/data/zips/nl) |
| New Caledonia | [41 codes](/data/zips/nc) |
| New Zealand | [2,973 — via API](/data/zips/nz) |
| Nicaragua | [7 codes](/data/zips/ni) |
| Nigeria | [33 codes](/data/zips/ng) |
| North Korea | [3 codes](/data/zips/kp) |
| North Macedonia | [140 codes](/data/zips/mk) |
| Northern Mariana Islands | [1 codes](/data/zips/mp) |
| Norway | [5,377 — via API](/data/zips/no) |
| Oman | [13 codes](/data/zips/om) |
| Pakistan | [832 — via API](/data/zips/pk) |
| Palau | [1 codes](/data/zips/pw) |
| Palestine | [11 codes](/data/zips/ps) |
| Panama | [25 codes](/data/zips/pa) |
| Papua New Guinea | [5 codes](/data/zips/pg) |
| Paraguay | [56 codes](/data/zips/py) |
| Peru | [326 codes](/data/zips/pe) |
| Philippines | [2,280 — via API](/data/zips/ph) |
| Poland | [21,342 — via API](/data/zips/pl) |
| Portugal | [47,433 — via API](/data/zips/pt) |
| Puerto Rico | [183 codes](/data/zips/pr) |
| Qatar | [9 codes](/data/zips/qa) |
| Republic of the Congo | [1 codes](/data/zips/cg) |
| Reunion | [67 codes](/data/zips/re) |
| Romania | [13,623 — via API](/data/zips/ro) |
| Russia | [10,009 — via API](/data/zips/ru) |
| Rwanda | [2 codes](/data/zips/rw) |
| Saint Barthelemy | [1 codes](/data/zips/bl) |
| Saint Kitts and Nevis | [4 codes](/data/zips/kn) |
| Saint Martin | [3 codes](/data/zips/mf) |
| Saint Pierre and Miquelon | [3 codes](/data/zips/pm) |
| San Marino | [6 codes](/data/zips/sm) |
| Sao Tome and Principe | [2 codes](/data/zips/st) |
| Saudi Arabia | [56 codes](/data/zips/sa) |
| Senegal | [5 codes](/data/zips/sn) |
| Serbia | [44 codes](/data/zips/rs) |
| Seychelles | [4 codes](/data/zips/sc) |
| Singapore | [159 codes](/data/zips/sg) |
| Slovakia | [2,736 — via API](/data/zips/sk) |
| Slovenia | [1,449 — via API](/data/zips/si) |
| Solomon Islands | [1 codes](/data/zips/sb) |
| Somalia | [5 codes](/data/zips/so) |
| South Africa | [3,672 — via API](/data/zips/za) |
| South Korea | [1,576 — via API](/data/zips/kr) |
| South Sudan | [2 codes](/data/zips/ss) |
| Spain | [11,707 — via API](/data/zips/es) |
| Sri Lanka | [572 — via API](/data/zips/lk) |
| Sudan | [2 codes](/data/zips/sd) |
| Svalbard and Jan Mayen | [2 codes](/data/zips/sj) |
| Sweden | [14,738 — via API](/data/zips/se) |
| Switzerland | [4,493 — via API](/data/zips/ch) |
| Syria | [7 codes](/data/zips/sy) |
| Tadjikistan | [12 codes](/data/zips/tj) |
| Taiwan | [122 codes](/data/zips/tw) |
| Tanzania | [6 codes](/data/zips/tz) |
| Thailand | [1,402 — via API](/data/zips/th) |
| The Bahamas | [1 codes](/data/zips/bs) |
| Tonga | [1 codes](/data/zips/to) |
| Tunisia | [22 codes](/data/zips/tn) |
| Turkey | [2,900 — via API](/data/zips/tr) |
| Turkmenistan | [3 codes](/data/zips/tm) |
| Tuvalu | [1 codes](/data/zips/tv) |
| U.S. Virgin Islands | [2 codes](/data/zips/vi) |
| Uganda | [7 codes](/data/zips/ug) |
| Ukraine | [3,841 — via API](/data/zips/ua) |
| United Arab Emirates | [32 codes](/data/zips/ae) |
| United Kingdom | [17,950 — via API](/data/zips/gb) |
| United States | [42,043 — via API](/data/zips/us) |
| Uruguay | [311 codes](/data/zips/uy) |
| Uzbekistan | [34 codes](/data/zips/uz) |
| Vanuatu | [2 codes](/data/zips/vu) |
| Venezuela | [165 codes](/data/zips/ve) |
| Vietnam | [957 — via API](/data/zips/vn) |
| Wallis and Futuna | [7 codes](/data/zips/wf) |
| Yemen | [1 codes](/data/zips/ye) |
| Zambia | [4 codes](/data/zips/zm) |
| Zimbabwe | [5 codes](/data/zips/zw) |
# Dashboard Overview
Source: https://docs.2extract.com/getting-started/dashboard-overview
A guided tour of your main dashboard, the central hub for managing your 2extract.com account and proxies.
The Dashboard is the first screen you see after logging in. It's designed to give you a high-level overview of your account's status, recent activity, and quick access to the most common actions.
Let's break down each section.
***
## 1. Header Zone
The top section of the dashboard provides a welcome message and your primary Call-to-Action (CTA).
* **Primary CTA Button:** This button is smart! It changes based on your account's status:
* If your balance is sufficient, it will show **`+ Create Proxy`** to get you started quickly
* If your balance is low or zero, it will change to **`Top Up Balance`**, guiding you to the billing step
***
## 2. Workspace Zone
This is the main area where you'll find your key metrics and activity summaries.
### Account Status
This block gives you an instant snapshot of your account's most important numbers. Each metric is a clickable link that takes you to the relevant management page.
Shows your available funds for Pay-As-You-Go proxies. Click to go to the **Billing** page.
The total number of proxies currently active on your account. Click to go to the **My Proxies** page.
Your total data usage across all proxies in the last 30 days. Click to scroll down to the detailed chart.
### Usage Overview Chart
This chart visualizes your consumption over time.
* **Metric Selector:** Switch the view between `Traffic (GB)` and total `Requests`
* **Period Selector:** Adjust the time range to see data for the `Last 7 Days`, `Last 30 Days`, or `Last 90 Days`
* **Info Tooltip:** Hover over the `(i)` icon for a reminder that this chart shows total usage. For a per-proxy breakdown, you'll need to view the statistics on the individual proxy's settings page.
### My Recent Proxies
This table provides quick access to your most recently used proxies, so you don't have to search through the full list.
* **Columns:** Shows the proxy `Name`, `Status`, and `Traffic Used` in the last 24 hours
* **Link:** Use the `View All Proxies →` link to navigate to the main "My Proxies" page
### Quick Start & Integration
This block is designed to help you integrate our proxies into your tools as quickly as possible.
* **Links:** Direct links to our **Quick Start Guide** and this **Documentation**
* **Interactive Snippet:** A ready-to-use code example for one of your active proxies. You can switch between languages like `cURL`, `Python`, and `Node.js`, and copy the code with a single click
# Quick Start: Your First Request in 2 Minutes
Source: https://docs.2extract.com/getting-started/quick-start
Follow these 4 simple steps to go from a new account to a successful proxy request in under two minutes.
This guide will walk you through the entire process of setting up your account and making your first successful request through our proxy network. Let's get started!
Before you can create a proxy, you need to add funds to your account. All Pay-As-You-Go proxies use this central balance.
1. Navigate to the **[Billing](https://2extract.com/app/billing)** page from the sidebar menu
2. Select a top-up amount or enter a custom one. The minimum is \$10
3. Click the **Top Up** button and complete the payment process via Stripe
Once your payment is successful, you'll see your updated balance on the Billing page and in your dashboard.
A proxy is your configurable gateway to our network. Let's create one.
1. Navigate to the **[My Proxies](https://2extract.com/app/proxies)** page
2. Click the **+ Create Proxy** button
3. On the proxy creation pop-up:
* Give your proxy a memorable **Name**, like `myfirstscraper`
* For now, you can leave all other settings at their defaults
4. Click **Create Proxy**
Choose your proxy name carefully. It **cannot be changed** after creation.
You will be redirected to the settings page for your newly created proxy.
On your new proxy's settings page, you'll find the "Connection Details" block. The easiest way to get your credentials is to use the **Copy Credentials** button.
1. Click the **Copy Credentials** button
2. A dropdown menu will appear with different formats
3. Click the "Copy" icon next to the `username:password@host:port` format
You can also copy each part individually if you prefer.
For security, your password is only shown here. We will never email it to you.
Now you're ready to test your connection. The easiest way is with a `cURL` command in your terminal. This command will ask for your real IP address through the proxy.
1. Open your terminal (on macOS, Linux, or Windows)
2. Copy the command below and **replace** `PROXY_USERNAME` and `PROXY_PASSWORD` with the credentials you copied in the previous step
```bash cURL theme={null}
curl --proxy PROXY_USERNAME:PROXY_PASSWORD@proxy.2extract.net:5555 "https://api.ipify.org"
```
```python ip_check.py theme={null}
import requests
proxy_user = 'PROXY_USERNAME'
proxy_pass = 'PROXY_PASSWORD'
proxy_host = 'proxy.2extract.net'
proxy_port = '5555'
proxies = {
'http': f'http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}',
'https': f'http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}',
}
response = requests.get('https://api.ipify.org?format=json', proxies=proxies)
print(response.json())
```
Press Enter. If everything is correct, you will see a response like this, showing a residential IP address:
```json theme={null}
{"ip":"123.45.67.89"}
```
You've just made your first successful request through the 2extract network. You're now ready to integrate our proxies into any of your projects.
## Next Steps
Learn how to control geo-targeting and sessions.
Find examples for Puppeteer, Scrapy, and more.
# Account Management
Source: https://docs.2extract.com/guides/account-management
Learn how to manage your personal information, security settings, API tokens, and monitor account activity.
The **Settings** screen is your central hub for managing all aspects of your 2extract.com account. Here you can update your personal details, enhance your account's security, and track important events.
## Profile & Personal Information
This section allows you to manage your basic profile details.
* **Account ID:** Your unique account identifier. Please provide this when contacting support
* **Full Name:** Your full name
* **Company Name:** The name of your company (optional)
* **Country of Residence:** Your country of residence, used for compliance and billing purposes
* **Email Address:** Your login email. This field cannot be changed
Security is a top priority. This section provides tools to keep your account secure.
#### Change Password
You can change your password at any time. You will be required to enter your current password to set a new one.
#### Two-Factor Authentication (2FA) (Coming Soon)
Add an extra layer of security to your account. When enabled, you'll be required to enter a code from your authenticator app upon login.
The Event Log provides a complete, filterable history of all significant actions that have occurred in your account. This is a powerful tool for security auditing and debugging.
You will be able to track events such as:
* User logins (successful and failed attempts)
* Proxy creation, updates, and deletion
* Billing events like top-ups and failed payments
* Security changes like password updates or API token creation
Each event includes the action performed, the time it occurred, the actor (you, an API token, or the system), and the associated IP address.
This is a "danger zone" action and should be used with caution.
If you choose to delete your account, all your active proxies will be immediately deactivated. You will lose access to your remaining account balance, and it will not be refunded. In accordance with our Privacy Policy, your account data will be scheduled for permanent deletion. This action is irreversible. You will be asked to confirm this action by entering your password.
You can find the option to delete your account at the bottom of your **[Profile Settings](https://2extract.com/settings)** page.
***
## Account Verification (KYC)
#### Why We Ask for Verification
At 2extract.com, our commitment to maintaining an **ethical and secure proxy network** is our highest priority. To achieve this, we need to ensure our platform is used responsibly and prevent fraudulent or illicit activities. The Know Your Customer (KYC) process is a standard security measure that helps us do just that.
#### Benefits of a Verified Account
Unverified accounts may have certain initial limitations. By completing verification, you will:
* **Remove usage and spending limits,** allowing you to scale your operations without restrictions
* **Gain access to our full range of proxy pools,** including certain high-trust networks
* **Enhance the overall security** of your account
#### Our Trusted Partner: Didit.me
To ensure your data is handled with the utmost security and privacy, we have partnered with **[Didit.me](https://didit.me/)**.
The entire verification process is handled securely on their platform. 2extract.com does not store your sensitive identity documents on our servers.
The process is fast and usually takes only a few minutes to complete.
# Billing & Usage
Source: https://docs.2extract.com/guides/billing-usage
Understand how our pricing works, from the central account balance and Pay-As-You-Go plan to future subscription models.
To unlock deposits over \$50, verify your identity.
At 2extract.com, we believe in transparent and predictable pricing. This guide explains our billing model, how to manage your funds, and how to track your usage.
## How Our Billing Works: Balance vs. Subscriptions
Our billing system is designed for flexibility, combining a central account balance with per-proxy plans.
Think of this as your central wallet for all Pay-As-You-Go (PAYG) activity. You top up this balance with funds, and your PAYG proxies consume traffic by deducting costs from it. This balance is shared across all your PAYG proxies.
For predictable, high-volume needs, you will be able to assign a monthly subscription plan to a specific proxy. This will give the proxy a dedicated traffic allowance for a fixed monthly fee. This feature is not yet available.
**Key takeaway:** Your **Account Balance** is for flexible, on-demand usage (PAYG). Subscription plans for predictable, recurring needs are coming soon.
## Topping Up Your Balance (Pay-As-You-Go)
The Pay-As-You-Go (PAYG) plan is the default for all new proxies and offers maximum flexibility.
1. **Navigate to the [Billing](https://2extract.com/billing) page.** Here you'll see your current balance
2. **Choose an amount.** You can select a predefined amount or enter a custom one
3. **Complete the payment.** You will be redirected to our secure payment partner, Stripe, to complete the transaction
Your funds will be added to your account balance immediately after the payment is confirmed. This balance never expires as long as your account is active.
***
## Setting Up Auto Top-Up (Coming Soon)
To ensure your PAYG proxies run without interruption, you will be able to enable Auto Top-Up.
* **How it will work:** When your account balance falls below a threshold you set (e.g., $10), we will automatically charge your saved payment method for a predefined amount (e.g., $50).
* **Control:** You will have full control over the thresholds, amounts, and the payment method used.
This feature is perfect for mission-critical tasks where downtime is not an option.
***
## Understanding Your Usage Statistics
We provide detailed statistics so you always know where your traffic is going.
* **Dashboard:** The main dashboard gives you a high-level overview of your **total** traffic consumption across all proxies.
* **"My Proxies" Page:** This screen shows the traffic used and cost incurred for **each individual proxy** in the current billing period.
* **Proxy Settings Page:** For the most detailed breakdown, navigate to a specific proxy's settings page. Here you'll find a chart visualizing its daily usage of both traffic and requests.
***
## Understanding Your Billing Page
The **Billing** page is your central hub for managing your account's finances. It shows you the "big picture" — all the **transactions** that add or remove funds from your main account balance.
This includes events like:
* Manual Top-ups
* Automatic Top-ups (in the future)
* Subscription payments (in the future)
* Refunds or credit adjustments
#### Where to Find Pay-As-You-Go Spending Details?
The Transaction History on the Billing page **does not** show every small deduction for Pay-As-You-Go traffic. This is done intentionally to keep your history clean and readable.
To see a detailed breakdown of how much a **specific proxy** has spent from your balance:
1. Navigate to the **[My Proxies](https://2extract.com/proxies)** page
2. Click on the name of the proxy you want to inspect
3. On the **Proxy Settings** page, you will find the **Usage Statistics** block, which shows the exact traffic consumed and the corresponding cost for that specific proxy
This approach allows you to see both your overall account funding history (on the Billing page) and the specific operational costs of each project (on the Proxy Settings page).
***
## Accessing Invoices
For your accounting needs, all your payment history and official invoices are available directly from our secure payment partner.
1. Navigate to the **[Billing](https://2extract.com/billing)** page.
2. Click the **"View Full History & Invoices"** button.
3. You will be securely redirected to your personal **Stripe Customer Portal**.
In the portal, you can view all past transactions, download PDF invoices, and manage your saved payment methods.
# Identity Verification (KYC)
Source: https://docs.2extract.com/guides/kyc
How to verify your account to unlock higher deposit limits.
To ensure the security of our platform and comply with financial regulations, 2extract requires users to complete a Know Your Customer (KYC) verification process to access full billing features.
**Deposit Limit:** Unverified accounts have a cumulative lifetime deposit limit of **\$50**. To deposit more funds, you must complete identity verification.
## Why is verification required?
We implement identity verification to prevent fraud, ensure compliance with international laws, and maintain a high-quality network for all our users.
Once you are verified, you will unlock:
* **Unlimited deposits:** Remove the \$50 cap on your balance top-ups.
* **Trust status:** Reduced risk of automated security flags on your account.
## Our Partner: Didit
We value your privacy and data security. That is why we do not store your personal identity documents on our servers.
We partner with **[Didit](https://didit.me/)**, a specialized and GDPR-compliant identity verification provider. Didit handles the secure processing and validation of your documents. 2extract only receives the confirmation status (Verified/Rejected).
## How to Verify Your Account
The verification process is fast and usually takes less than 5 minutes. You will need a valid government-issued ID (Passport, Driver's License, or National ID Card).
You don't have to wait until you hit the deposit limit. You can verify your account voluntarily at any time:
1. Navigate to the **[Profile](https://2extract.com/app/profile)** page.
2. Locate the **Verification** section.
3. Click the **Start Verification** button.
The Didit interface will open directly in the same window. To ensure the best image quality, the process is designed to be completed on a mobile device.
**Scan the QR code** displayed on your screen using your smartphone's camera and follow the instructions on your phone.
On your mobile device, you will be asked to:
1. Take a photo of your **government-issued ID** (Passport, Driver's License, etc.).
2. Take a **selfie** to prove that you are the owner of the document.
The system will automatically validate the authenticity of your documents and verify your identity.
Upon success, your account status will instantly change to **Verified**, and all deposit restrictions will be removed. You will see a confirmation in your profile.
## Document Requirements
To ensure your verification is approved on the first try, please follow these guidelines:
* **Validity:** The document must be valid and not expired.
* **Quality:** Photos must be in color and high resolution.
* **Condition:** The document should not be physically damaged.
## Troubleshooting
If your verification was declined, Didit usually provides a reason. Common reasons include:
* **Blurry Image:** The camera failed to focus. Please retake the photo in better lighting.
* **Glare:** Flash or overhead lights made parts of the ID unreadable.
* **Cut-off corners:** All four corners of the document must be visible in the frame.
* **Unsupported Document:** You used a student ID, library card, or bank card instead of a government ID.
If you believe your document was rejected in error, or if you encounter technical issues during the process, please contact us [support@2extract.com](mailto:support@2extract.com).
# My proxy is not connecting (407 Error)
Source: https://docs.2extract.com/help/common-problems/407-proxy-authentication-required
A step-by-step checklist to diagnose and fix the most common connection error, the 407 error.
The `407 Proxy Authentication Required` error is the most common issue you might encounter. The good news is that it's almost always easy to fix. This error means our gateway is rejecting your connection request, and it's always due to one of the four reasons below.
Follow this checklist step-by-step to solve the problem.
### Step 1: Check Your Proxy Credentials
The most common cause is a simple typo in your username or password.
1. Navigate to the **[My Proxies](https://2extract.com/app/proxies)** page and click on the proxy you are using.
2. In the **Connection Details** block, carefully copy the `Username` and `Password` again.
3. Paste them directly into your script or tool, ensuring there are no extra spaces or characters.
### Step 2: Verify Your IP Whitelist
If you are using IP whitelisting, your current IP address must be in the `Authorized IPs` list for that specific proxy.
1. Find your current IP address. A simple way is to google "what is my IP".
2. Go to your proxy's settings page and find the **Advanced Security** section.
3. Check the **Authorized IPs** list. Does it contain your current IP address?
Remember, if a proxy has its own `Authorized IPs` list, the global account-level whitelist is ignored for that proxy.
### Step 3: Check Your Account Balance
Our Pay-As-You-Go proxies stop working the moment your account balance reaches zero.
1. Navigate to the **[Billing](https://2extract.com/app/billing)** page.
2. Check your **Current Balance**. If it is \$0.00 or less, your proxies have been automatically suspended.
3. **Solution:** Simply top up your balance to reactivate them instantly.
### Step 4: Check The Proxy Status
Ensure the proxy you are trying to use is active.
1. Navigate to the **[My Proxies](https://2extract.com/app/proxies)** page.
2. Find your proxy in the list and check its **Status** badge.
3. If the status is `Inactive` or `Suspended`, your proxy will not accept connections. You can reactivate an `Inactive` proxy from the "Actions" menu. If it's `Suspended`, check your balance or usage limits.
# Why was my account/proxy suspended?
Source: https://docs.2extract.com/help/common-problems/account-or-proxy-suspended
The main reasons for service suspension and how to resolve them.
If your proxies stop working and you see a `Suspended` status, it's always for a clear reason. Here are the possible causes.
### Cause 1: Zero Account Balance (Most Common)
This is the most frequent reason for suspension.
* **What happened:** Your Pay-As-You-Go proxies have consumed all the funds in your main account balance.
* **How to check:** Go to your **[Billing](https://2extract.com/app/billing)** page. If your balance is \$0.00 or less, this is the cause.
* **Solution:** Simply **top up your balance**. All your proxies will be reactivated automatically and instantly upon successful payment.
### Cause 2: Proxy Usage Limit Reached
You may have set a specific traffic limit for one of your proxies.
* **What happened:** A specific proxy has reached its daily or monthly traffic limit.
* **How to check:** Go to the **[My Proxies](https://2extract.com/app/proxies)** page. The suspended proxy will show its usage as `10 / 10 GB`, for example.
* **Solution:** Edit the proxy's settings and **increase or remove its usage limit**.
### Cause 3: Violation of Terms of Service
In rare cases, we may suspend an account or proxy if our monitoring systems detect activity that violates our **[Acceptable Use Policy](/legal/acceptable-use-policy)**. This includes activities like spam, fraud, or launching attacks.
* **What happened:** Our security system has flagged your activity.
* **Solution:** If you believe this is an error, please **contact our [Support Team](mailto:support@2extract.com)** immediately. We will investigate the issue with you.
# My requests are being blocked or I see CAPTCHA
Source: https://docs.2extract.com/help/common-problems/blocked-or-captcha
Strategies to handle blocks from target websites and improve your scraping success rate.
If you're getting blocked, seeing CAPTCHAs, or receiving error codes like `403 Forbidden` or `429 Too Many Requests`, congratulations – **our proxy is working perfectly!** The issue is not with our service, but with the anti-bot defenses of the website you are targeting.
Here are the most effective strategies to overcome these blocks.
### Strategy 1: Use Sticky Sessions
Sending every request from a new IP is highly suspicious for many websites. Mimic a real user by maintaining the same IP for a sequence of actions.
* **How:** Add the `-session-[your_id]` parameter to your proxy username.
* **When:** Essential for logging in, navigating through multiple pages, or any multi-step process.
* **Learn more:** [Session Control Guide](/proxy-products/configuration/session)
### Strategy 2: Rotate Your Geo-Location
Some websites are less strict with traffic from certain countries. Experiment with different locations.
* **How:** Use the `-country-[code]` parameter. Try targeting a country close to the target website's servers.
* **When:** Useful if you notice that blocks are specific to your default location.
### Strategy 3: Perfect Your HTTP Headers
The `User-Agent` is the most common fingerprint websites check.
* **How:** Ensure your scraper is sending a modern, realistic browser `User-Agent` (e.g., a recent Chrome or Firefox version). Do not use the default `python-requests` User-Agent.
* **Best Practice:** Create a list of 5-10 real User-Agents and rotate them randomly for each request. Also, consider mimicking other headers like `Accept-Language` and `Referer`.
### Strategy 4: Slow Down and Be Human
Bots are fast. Humans are not. A high request rate is the easiest way to get blocked.
* **How:** Add a random delay (e.g., between 2 to 5 seconds) between your requests. Never scrape as fast as you can.
* **When:** Always. This is the single most important principle of ethical and successful web scraping.
### Strategy 5: Consider Mobile Proxies (For the Toughest Targets)
For highly protected targets like social media or flight aggregators, even residential proxies can be blocked. Mobile IPs have the highest trust level.
* **How:** [Create a Mobile Proxy](/proxy-products/mobile/introduction-use-cases) and use it for these specific tasks.
* **When:** When all other strategies fail on a particularly difficult website.
# How do I use your proxies with Puppeteer/Scrapy/Selenium?
Source: https://docs.2extract.com/help/common-problems/how-to-with-frameworks
Find direct links to our detailed integration guides for the most popular scraping frameworks and tools.
Integrating our proxies into your favorite tools is straightforward. While the exact implementation varies, the core principle is always the same: you need to configure your tool's HTTP client to route its requests through our gateway using your credentials.
We have created detailed, copy-paste ready guides for the most popular tools in our **Integrations** section.
### Scraping Frameworks & Libraries
* **[Python: Requests Integration](/integrations/scraping-frameworks/python-requests)**
* **[Python: Scrapy Integration](/integrations/scraping-frameworks/python-scrapy)**
* **[Node.js: Puppeteer Integration](/integrations/scraping-frameworks/nodejs-puppeteer)**
* **[Node.js: Playwright Integration](/integrations/scraping-frameworks/nodejs-playwright)**
* **[Node.js: Axios Integration](/integrations/scraping-frameworks/nodejs-axios)**
### Browser Automation
* **[Selenium Integration (All Languages)](/integrations/scraping-frameworks/selenium)**
### Other Tools
* **[Anti-Detect Browsers (e.g., AdsPower, Dolphin)](/integrations/anti-detect-browsers)**
* **[Browser Extensions (e.g., FoxyProxy)](/integrations/proxy-managers)**
Can't find your tool? Our general connection format (`username:pass@host:port`) is compatible with almost any application that supports HTTP/SOCKS5 proxies. If you need help, don't hesitate to **[contact support](mailto:support@2extract.com)**.
# My IP location is incorrect
Source: https://docs.2extract.com/help/common-problems/ip-location-incorrect
Why the location of your proxy IP might differ across various checking tools and what it means.
You may notice that when you check your proxy's IP address on different websites, they sometimes report different locations (especially the city). This is a normal and expected phenomenon in the geolocation industry.
### Why Do Location Mismatches Happen?
There is no single, central database for IP geolocation. Every IP checking service (including us) subscribes to a data provider, such as MaxMind or DB-IP. These providers constantly update their databases, but they don't all update at the same time.
This can lead to temporary discrepancies:
* **Provider A** might have updated its database yesterday, correctly identifying an IP as being in Berlin.
* **Provider B** might be using a database from last week, which still lists that same IP as being in Munich.
### What 2extract.com Guarantees
While the city-level accuracy can vary slightly, we guarantee the following:
1. **Country-Level Accuracy:** When you request a proxy from a specific country (e.g., `-country-de`), the IP address will **always** belong to that country.
2. **Data Source:** Our targeting is based on data from leading industry providers to ensure the highest possible accuracy.
### How to Verify Your Location
If you need a consistent point of reference, we recommend using a well-regarded checker like [IPinfo.io](https://ipinfo.io/) to verify the location of your IP address.
If you consistently receive IPs from a country different from the one you targeted, this is not a database issue. Please double-check your username parameters or contact our **[Support Team](mailto:support@2extract.com)**.
# My connection is slow
Source: https://docs.2extract.com/help/common-problems/slow-connection
Learn why your proxy connection might be slow and how to optimize it for better performance.
The speed of a proxy connection depends on multiple factors. If you are experiencing slow response times, here is a checklist to help you diagnose the cause.
### Factor 1: The "Speed of Light" (Geography)
The physical distance between your server, our proxy, and the target website is the most significant factor.
* **Scenario:** Your scraping server is in New York, your proxy is in Australia, and the target website is in London. Your data has to travel around the world and back.
* **Solution: Co-location.** Try to choose a proxy geo-location that is physically close to either **your server** or the **target website**.
* If the target server is fast, choose a proxy **close to your server**.
* If the target server is slow, choose a proxy **close to the target**.
### Factor 2: The Target Website's Performance
Often, the bottleneck is not the proxy, but the website you are scraping.
* **How to Test:** Try making the same request to a known fast website (like `google.com`) through the same proxy.
* **If the request to Google is fast:** The problem is with your original target website, not our proxy.
* **If the request to Google is also slow:** The problem might be with the proxy connection.
### Factor 3: The Specific Residential IP
Residential and mobile IPs are real devices, and their connection speeds can vary. Occasionally, you may be assigned an IP on a slower network.
* **Solution: Rotate the IP.** Simply make your next request with a new session ID (or no session ID) to get a new IP address from our pool. The vast majority of IPs in our network are on high-speed connections.
### Factor 4: Your Own Network Connection
Ensure that the network connection of your own server is not the bottleneck. Run a speed test from your server to a nearby location to check its baseline performance.
# My proxy is not connecting (Timeout / Connection Refused)
Source: https://docs.2extract.com/help/common-problems/timeout-connection-refused
What to do when you can't establish a connection to our proxy gateway.
Connection Timeouts or "Connection Refused" errors typically indicate a network-level issue between your machine and our proxy gateway. Here’s how to troubleshoot it.
### Step 1: Verify Host and Port
First, ensure you are using the correct host and port number for your proxy.
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
A common mistake is using the wrong port number or misspelling the host.
### Step 2: Check Your Firewall
Your local machine, server, or cloud provider (like AWS or Google Cloud) may have a firewall that blocks outgoing connections to specific ports.
1. **Check your local firewall rules** (e.g., Windows Firewall, `ufw` on Linux).
2. **Check your cloud provider's security group rules.** Make sure that outgoing (egress) traffic is allowed to the TCP port your proxy uses.
### Step 3: Use a Network Diagnostic Tool
You can use a built-in tool from your command line to check for basic connectivity.
```bash macOS / Linux theme={null}
nc -zv proxy.2extract.net 5555
```
```powershell Windows (PowerShell) theme={null}
Test-NetConnection -ComputerName proxy.2extract.net -Port 5555
```
* If the connection succeeds (`nc` shows `succeeded`, PowerShell shows `TcpTestSucceeded: True`): your network path is fine. The problem is likely in your script's configuration.
* If the command hangs or reports a failure: there is a network block somewhere between you and our gateway. Re-check your firewall rules.
If you've checked all of the above and the issue persists, please contact our **[Support Team](mailto:support@2extract.com)** and provide them with the output of your diagnostic tests.
# I've reached my traffic limit, what happens now?
Source: https://docs.2extract.com/help/common-problems/traffic-limit-reached
What happens when your proxy reaches its configured traffic limit and how to get it working again.
Setting a usage limit on your proxies is a great way to control your spending. Here’s what happens when that limit is reached.
### 1. The Proxy is Automatically Suspended
When a proxy's consumed traffic (for the current day or month) equals or exceeds the limit you've set, its status will automatically change to **`Suspended`**.
* **What this means:** The proxy will immediately stop accepting new connection requests. Any script or tool using it will receive a connection error (typically a `407` error).
* **Where to check:** You will see the `Suspended` status badge next to the proxy name on your **[My Proxies](https://2extract.com/app/proxies)** dashboard.
### 2. The Limit Resets Automatically
Your usage limit is not permanent. It will automatically reset at the beginning of the next usage period.
* **If you set a `daily` limit:** The counter resets to zero at 00:00 UTC every day.
* **If you set a `monthly` limit:** The counter resets to zero at 00:00 UTC on the first day of each calendar month.
Once the period resets, the proxy's status will automatically return to **`Active`**, and it will start working again (provided your account balance is positive).
### How to Reactivate a Suspended Proxy Immediately
If you don't want to wait for the automatic reset, you have two options:
1. **Increase the Limit:** Navigate to the proxy's settings page and increase the `Usage Limit` to a higher value.
2. **Remove the Limit:** Set the limit to be unlimited.
After saving the changes, the proxy's status will immediately update to `Active`.
# Billing Questions
Source: https://docs.2extract.com/help/faq/billing
Answers to common questions about payments, balance, plans, and refunds.
We accept all major credit and debit cards, including Visa, MasterCard, and American Express, processed securely through our payment partner, Stripe. We are planning to add support for PayPal and other payment methods in the future.
With PAYG, you simply top up your account balance. As your proxies consume traffic, the cost is automatically deducted from this balance based on the per-GB rate for your chosen proxy type. You can learn more in our **[How Billing Works](/guides/billing-usage)** guide.
No. Your account balance does not expire as long as your account remains active. However, we reserve the right to close accounts that have been inactive for over 12 months, as stated in our **[Terms of Service](/legal/terms)**.
You can access your complete payment history, download invoices, and manage your payment methods at any time via the Stripe Customer Portal. You can find a secure link to it on your **[Billing](https://2extract.com/app/billing)** page.
Yes! For every proxy you create, you can set a daily or monthly **Usage Limit**. This is a powerful tool to control your costs and prevent unexpected spending. You can configure this on the proxy's settings page.
As a general rule, all purchases are final and non-refundable. However, we may offer a refund in the case of a technical failure on our side, provided it is reported within 48 hours. Please see our **[Terms of Service](/legal/terms)** for the full policy.
You need to complete identity verification. See our **[Account Verification guide](/guides/account-management#account-verification-kyc)**.
# General Questions
Source: https://docs.2extract.com/help/faq/general
Find answers to the most common questions about 2extract.com, our services, and our policies.
2extract.com is a proxy service provider focused on offering high-quality, ethically sourced residential and mobile proxies. We provide developers and businesses with the tools they need to reliably collect public web data at scale.
We are built on three core principles:
1. **100% Ethical Sourcing:** Every IP in our network comes from a real, informed user who has given their explicit consent.
2. **Developer-First Experience:** We provide a powerful API, an intuitive dashboard, and clear documentation to make integration as seamless as possible.
3. **Transparent Pricing:** Our pricing models are simple and predictable, with no hidden fees.
Currently, we offer **Residential Proxies** from desktop devices. We are actively working on launching **Mobile Proxies** in the near future. Stay tuned for updates!
Yes. Using proxies to access public web data is legal. However, you are solely responsible for ensuring that your specific data collection activities comply with all applicable laws (like GDPR and CCPA) and the terms of service of the websites you are targeting. For more details, please see our **[Terms of Service](/legal/terms)**.
We do not offer a traditional free trial. Instead, we have a very low entry barrier with our Pay-As-You-Go plan, allowing you to test our service with a minimal commitment (a \$10 top-up). We may also offer free test traffic to qualified users who schedule a product demo.
We are planning to launch a comprehensive affiliate program in the future. Keep an eye on our product updates for more information.
Our network covers over 195 countries worldwide. You can see a full list of available countries and apply targeting using the methods described in our **[Geo-Targeting Guide](/proxy-products/configuration/geo-targeting)**.
# Proxy & Connection Issues
Source: https://docs.2extract.com/help/faq/proxy-connection
Find answers to the most common technical questions about connecting to and using our proxies.
Both are protocols used to route your traffic.
* **HTTP/S** is the most common and is supported by virtually all tools. It's ideal for web scraping.
* **SOCKS5** is a more versatile, lower-level protocol that can handle different types of traffic beyond just web browsing.
For most web scraping tasks, **HTTP is the recommended choice**. You can learn more in our **[Protocols Guide](/proxy-products/configuration/protocols)**.
* **Rotating Sessions (Default):** You get a new IP address for every single request you make. This is best for maximum anonymity and scraping many simple pages.
* **Sticky Sessions:** You keep the same IP address for a set period (10 minutes). This is essential for tasks that require multiple steps, like logging into an account or completing a checkout process.
For a detailed comparison, see our **[Session Control Guide](/proxy-products/configuration/session)**.
This error means there's a problem with your access credentials or permissions. It is almost always caused by one of these issues:
1. **Incorrect Username or Password:** Double-check your proxy credentials.
2. **IP Not Whitelisted:** Your server's IP address is not in the `Authorized IPs` list for that specific proxy.
3. **Zero Balance:** Your account balance has run out. Please top up on the **[Billing](https://2extract.com/app/billing)** page.
4. **Proxy is Inactive/Suspended:** Check the proxy's status on the **[My Proxies](https://2extract.com/app/proxies)** page.
This is usually a sign that the **target website** has detected scraping activity. Our proxies are working, but the target is fighting back. Here are some things to try:
* **Use a Sticky Session:** A constantly changing IP can be suspicious. Try using a sticky session to mimic a real user.
* **Change Your Geo-Location:** The target may be less strict for traffic from a different country.
* **Check Your Headers:** Ensure you are sending realistic `User-Agent` and other HTTP headers.
* **Slow Down:** A high request rate is a major red flag. Add delays between your requests.
IP geolocation is not an exact science, and different providers use different databases that update at different times. We rely on industry-standard databases to provide the most accurate targeting possible. A slight mismatch in the reported city is normal, but the country should always be correct.
# Glossary
Source: https://docs.2extract.com/help/glossary
Understand the key terms and concepts used across the 2extract.com platform and documentation.
Welcome to the 2extract.com glossary. This page provides definitions for the common terms you will encounter while using our services. Click on any term to expand its definition.
The entity that performs an action within your account. An actor can be a registered user (e.g., `you@example.com`), an API Token (e.g., `API Token: "My Scraper"`), or the `System` itself (for automated actions). You can see the actor for each event in your **[Event Log](https://2extract.com/app/profile)**.
A unique number assigned to an Internet Service Provider (ISP). Targeting by ASN (`-asn-[number]`) allows you to get IP addresses from a specific network provider, such as Comcast or AT\&T.
A security feature that restricts proxy access to a list of pre-approved IP addresses. Requests from IPs not on this list will be rejected, even with valid credentials. This can be configured for each individual **Proxy**.
Your central account wallet in USD. Funds are added via top-ups and are used to pay for **Pay-As-You-Go** traffic and any overage from subscription plans. You can manage it on your **[Billing](https://2extract.com/app/billing)** page.
A mobile network operator (e.g., T-Mobile, Verizon, Vodafone). Carrier targeting (`-carrier-[name]`) is a feature exclusive to **Mobile Proxies**.
An IP address from a real mobile device on a 3G/4G/5G cellular network. Mobile proxies offer the highest level of trust and are ideal for targeting mobile-first websites and social media.
A flexible billing plan where you are charged only for the traffic you consume. The cost is deducted from your main account **Balance**.
Your personal, configurable gateway to our network. Each proxy you create has its own unique credentials, plan, security settings, and usage statistics. This allows you to manage different projects independently.
An IP address from a real desktop or laptop device connected to a genuine home Wi-Fi or cable network (ISP). These proxies are highly trusted and excellent for most web scraping tasks.
The process of changing the IP address used for your requests.
* **Per-Request Rotation (Default):** You get a new IP for every request.
* **Sticky Session:** You keep the same IP for multiple requests.
A series of requests made from the same IP address. You can create a **Sticky Session** using the `-session-[id]` parameter.
The current state of your proxy:
* **Active:** The proxy is running and ready to use.
* **Inactive:** The proxy has been manually paused by you and will not accept connections.
* **Suspended:** The proxy has been automatically stopped, either due to reaching a usage limit or a zero account balance.
A recurring billing plan (e.g., "Starter 30GB") that provides a set amount of traffic for a fixed monthly fee. Subscription plans will be available in a future update.
A security feature for a specific **Proxy** that allows it to connect only to a predefined list of domains or hostnames (e.g., `google.com`, `*.wikipedia.org`).
Special suffixes (like `-country-de` or `-session-user123`) that you can add to your proxy's username to control its behavior (e.g., geo-targeting, session type) in real-time for each request.
# Welcome to 2extract Documentation
Source: https://docs.2extract.com/index
Start here to understand what 2extract offers and how to get productive quickly.
This is your central hub for integrating and mastering our ethically sourced residential proxy network. Whether you're making your first request or building a large-scale data extraction pipeline, you'll find everything you need right here.
Go from zero to your first successful request in under 2 minutes.
## Our Philosophy
We built 2extract.com on two core principles.
We believe a proxy service should be a tool, not an obstacle. That's why we've built a clear, predictable API, an intuitive dashboard, and this comprehensive documentation. Our goal is to help you spend less time debugging and more time getting the data you need.
Every IP in our network is 100% ethically sourced from real users who have given their explicit consent. We provide our peers with full transparency and control. When you scrape with 2extract, you're using a network you can trust.
## Key Concepts
To get the most out of 2extract, it's helpful to understand these core concepts.
### Proxy
Your configurable gateway to our network. Each proxy has its own credentials, plan, and security settings, allowing you to manage different projects independently.
### Balance
Your central account wallet. You top up this balance to pay for your Pay-As-You-Go proxies.
### Proxy Gateway
The system that receives your requests. You control its behavior in real-time by adding parameters (like `-country-de`) to your proxy's username.
## Dive Right In
Learn how to control geo-targeting, sessions, and rotation by adding parameters to your username.
Explore all endpoints to programmatically manage your proxies, account, and billing.
Find copy-paste ready examples for your favorite tools like Python, Puppeteer, and Scrapy.
## Need Help?
Can't find what you're looking for? We're here to help.
Find quick solutions to the most frequently asked questions.
Our team of engineers is ready to assist you with any issue.
View our transparent, pay-as-you-go pricing with no hidden fees.
# 0detect
Source: https://docs.2extract.com/integrations/antidetect/0detect
Configure 0detect with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# ADBLogin
Source: https://docs.2extract.com/integrations/antidetect/adblogin
Use ADBLogin with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# AdsPower
Source: https://docs.2extract.com/integrations/antidetect/adspower
Use 2extract proxies in AdsPower.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Open Profile Management:** Launch AdsPower and go to "Profile Management".
2. **Create or Edit Profile:** Click **Create** or edit an existing profile.
3. **Set Proxy Information:** In the "Proxy" section, select the proxy type as **HTTP**.
4. **Enter Credentials:**
* **Proxy Host:** `proxy.2extract.net`
* **Proxy Port:** `5555`
* **Proxy Account:** Your proxy `Username`
* **Proxy Password:** Your proxy `Password`
5. **Verify:** Click **Check Proxy** to test the connection.
6. **Confirm:** Click **OK** to save the proxy settings for the profile.
# BitBrowser
Source: https://docs.2extract.com/integrations/antidetect/bitbrowser
Configure BitBrowser with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Camoufox
Source: https://docs.2extract.com/integrations/antidetect/camoufox
Use 2extract proxies in Camoufox.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# ChromePowerApp
Source: https://docs.2extract.com/integrations/antidetect/chromepowerapp
Use 2extract proxies with ChromePowerApp.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# DisCloak
Source: https://docs.2extract.com/integrations/antidetect/discloak
Configure DisCloak with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Dolphin-anty
Source: https://docs.2extract.com/integrations/antidetect/dolphin-anty
Configure Dolphin-anty profiles to use 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Go to the Proxies Section:** In the Dolphin Anty main menu, click on "Proxies".
2. **Create a New Proxy:** Click the **+ Create Proxy** button.
3. **Enter Proxy String:** In the popup window, paste your proxy credentials in the following format:
`http://USERNAME:PASSWORD@proxy.2extract.net:5555`
(Replace with your actual username, password, and port)
4. **Name and Verify:** Give your proxy a name and click **Add**. Dolphin will check the connection.
5. **Assign to Profile:** Now, go to the **Browsers** section, create a new profile or edit an existing one, and select your newly added proxy from the dropdown list.
6. **Save:** Save the browser profile to apply the settings.
# GhostBrowser
Source: https://docs.2extract.com/integrations/antidetect/ghostbrowser
Configure GhostBrowser with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Gologin
Source: https://docs.2extract.com/integrations/antidetect/gologin
Configure Gologin profiles to use 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Create a New Profile:** In the Gologin dashboard, click on **New profile**.
2. **Go to the Proxy Tab:** In the profile configuration menu, select the **Proxy** tab.
3. **Choose Your Proxy Type:** Select **HTTP Proxy** from the connection type list.
4. **Fill in the Details:** Enter your 2extract.com credentials:
* **Host or IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
5. **Check Connection:** Use the **Check Proxy** button to confirm that the connection is working.
6. **Create Profile:** Click **Create Profile**.
# Gpmlogin
Source: https://docs.2extract.com/integrations/antidetect/gpmlogin
Configure Gpmlogin with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Incogniton
Source: https://docs.2extract.com/integrations/antidetect/incogniton
Set up Incogniton with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Start a New Profile:** In the Incogniton dashboard, click \*\*New profile&&.
2. **Go to Proxy Settings:** Navigate to the "Proxy" section.
3. **Select Connection Type:** Choose **HTTP proxy**.
4. **Enter Credentials:** Fill in your 2extract.com proxy details in the provided fields (Host, Port, Username, Password).
5. **Check and Save:** Click **Check proxy** to verify the connection, then save the profile.
# Indigo
Source: https://docs.2extract.com/integrations/antidetect/indigo
Use 2extract proxies in Indigo Browser.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Create a New Profile:** Click **New browser profile** in the main dashboard.
2. **Proxy Settings:** In the "Proxy" section, click **New proxy**.
3. **Enter Details:**
* Select the proxy type: **HTTP Proxy**.
* Fill in the `IP address` (e.g., `proxy.2extract.net`), `Port`, `Login`, and `Password`.
4. **Check and Create:** Click **Check proxy** to test it, then **Create profile**.
# ixBrowser
Source: https://docs.2extract.com/integrations/antidetect/ixbrowser
Use 2extract in ixBrowser profiles.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Kameleo
Source: https://docs.2extract.com/integrations/antidetect/kameleo
Configure Kameleo profiles to use 2extract.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **New Profile:** In the Kameleo dashboard, create a new profile.
2. **Proxy Settings:** In the "Connection" section, select "Proxy" and choose **HTTP** as the type.
3. **Enter Credentials:** Fill in the Host, Port, Username, and Password fields with your 2extract.com details.
4. **Test and Save:** Test the connection using the provided button and then save the profile.
# LightPanda
Source: https://docs.2extract.com/integrations/antidetect/lightpanda
Configure LightPanda with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# LinkenSphere
Source: https://docs.2extract.com/integrations/antidetect/linkensphere
Configure LinkenSphere with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Create a New Session:** In the Session Manager, click **New Session**.
2. **Go to Proxy Settings:** Click the **Set proxy** button or navigate to the proxy tab.
3. **Select Protocol:** Choose **HTTP** (or HTTPS).
4. **Enter Credentials:** Input your proxy details in the format `login:password@host:port`.
`PROXY_USERNAME:PROXY_PASSWORD@proxy.2extract.net:5555`
5. **Save:** Save the proxy settings and then save the session.
# Morelogin
Source: https://docs.2extract.com/integrations/antidetect/morelogin
Set up Morelogin with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Multilogin
Source: https://docs.2extract.com/integrations/antidetect/multilogin
Configure Multilogin to use 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Create or Edit a Profile:** Open the Multilogin app and either create a new browser profile or click to edit an existing one.
2. **Navigate to Proxy Settings:** In the profile settings window, go to the "Proxy" tab.
3. **Select Connection Type:** Choose HTTP proxy as the connection type.
4. **Enter Credentials:** Fill in the fields with your 2extract.com proxy details:
* **Address:** proxy.2extract.net:5555 (replace with your host & port)
* **Login:** Your proxy Username
* **Password:** Your proxy Password
5. **Check Proxy:** Click the **Check proxy** button to verify the connection. You should see your proxy's IP address and location.
6. **Save Profile:** Save your profile settings. All traffic within this profile will now be routed through your 2extract.com proxy.
# NSTBrowser
Source: https://docs.2extract.com/integrations/antidetect/nstbrowser
Configure NSTBrowser with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Octo Browser
Source: https://docs.2extract.com/integrations/antidetect/octo-browser
Configure Octo Browser with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Create a New Profile:** In the Octo Browser dashboard, click **+ Create Profile**.
2. **Set Connection Type:** In the "Connection" section, select "Proxy".
3. **Choose Protocol:** Select **HTTP** as the protocol.
4. **Enter Proxy String:** Paste your proxy credentials in the `host:port:login:password` format, like this:
`proxy.2extract.net:5555:PROXY_USERNAME:PROXY_PASSWORD`
5. **Check and Save:** Click **Check proxy** to validate, then **Create Profile** to save.
# PotaBrowser
Source: https://docs.2extract.com/integrations/antidetect/potabrowser
Configure PotaBrowser with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Undetectable
Source: https://docs.2extract.com/integrations/antidetect/undetectable
Configure Undetectable with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
1. **Create a New Profile:** From the main screen, click **New Profile**.
2. **Navigate to the Proxy Tab:** Go to the "Proxy" tab in the new profile settings.
3. **Add a New Proxy:** Click **New Proxy**.
4. **Enter Details:** Select **HTTP** as the protocol and enter your proxy `Host`, `Port`, `Login`, and `Password`.
5. **Check and Assign:** Check the proxy connection. If successful, assign it to the profile and save.
# VektorT13
Source: https://docs.2extract.com/integrations/antidetect/vektort13
Use VektorT13 with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Vmlogin
Source: https://docs.2extract.com/integrations/antidetect/vmlogin
Use 2extract with Vmlogin.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Wade
Source: https://docs.2extract.com/integrations/antidetect/wade
Configure Wade browser with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Whologin
Source: https://docs.2extract.com/integrations/antidetect/whologin
Use Whologin with 2extract proxies.
**Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need:
* **Host:** `proxy.2extract.net`
* **Port:** `5555`
* **Username:** (e.g., `2xt-customer-...`)
* **Password:** (Your proxy's password)
The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly.
1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network".
2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol.
3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details:
* **Host/IP:** `proxy.2extract.net`
* **Port:** `5555`
* **Login/Username:** Your proxy `Username`
* **Password:** Your proxy `Password`
4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy.
5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile.
If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network.
# Go: net/http
Source: https://docs.2extract.com/integrations/frameworks/go-net-http
Learn how to integrate 2extract.com proxies into your Go applications using the standard `net/http` package for high-performance web scraping.
Go is a fantastic choice for building high-performance, concurrent web scrapers. Integrating 2extract.com proxies is straightforward using the standard library's `net/http` package by configuring a custom `http.Transport`.
### Basic Setup
The key to using a proxy with authentication in Go is to create a custom `http.Client` with a `Transport` that has its `Proxy` field set.
```go basic_setup.go icon="golang" lines wrap theme={null}
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
)
func main() {
// 1. Get these from your proxy's "Connection Details" page
proxyHost := "proxy.2extract.net"
proxyPort := 5555
proxyUser := "PROXY_USERNAME"
proxyPass := "PROXY_PASSWORD"
// 2. Construct the proxy URL with credentials
proxyURLString := fmt.Sprintf("http://%s:%s@%s:%d", proxyUser, proxyPass, proxyHost, proxyPort)
proxyURL, err := url.Parse(proxyURLString)
if err != nil {
log.Fatalf("Failed to parse proxy URL: %v", err)
}
// 3. Create a custom HTTP transport and set the Proxy
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
// 4. Create a custom HTTP client using the transport
client := &http.Client{
Transport: transport,
}
// 5. Make your request!
fmt.Println("Making request to IP checker...")
resp, err := client.Get("https://api.ipify.org?format=json")
if err != nil {
log.Fatalf("Failed to make request: %v", err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalf("Failed to read response body: %v", err)
}
fmt.Printf("Success! Your proxy IP is: %s\n", string(body))
}
```
### Real-World Example: Scraping Hacker News Headlines
Let's build a simple but efficient Go application to scrape the titles of the top stories from the Hacker News homepage (`news.ycombinator.com`). This is a classic scraping target.
This example demonstrates how to create a reusable function to perform the scraping, making it easy to adapt for other targets. We will target Hacker News as if we were in the **United Kingdom (GB)**.
This example uses the `goquery` package for easy HTML parsing, similar to jQuery. Install it with:
`go get github.com/PuerkitoBio/goquery`
```go hn_scraper.go icon="golang" lines wrap theme={null}
package main
import (
"fmt"
"log"
"net/http"
"net/url"
"github.com/PuerkitoBio/goquery"
)
// --- Your Base Credentials ---
const (
BASE_USERNAME = "PROXY_USERNAME"
PASSWORD = "PROXY_PASSWORD"
PROXY_HOST = "proxy.2extract.net"
PROXY_PORT = 5555
)
// createProxyClient creates and returns an http.Client configured with our proxy.
func createProxyClient(region string) (*http.Client, error) {
// Dynamically construct the username for the target region
proxyUser := fmt.Sprintf("%s-country-%s", BASE_USERNAME, region)
proxyURLString := fmt.Sprintf("http://%s:%s@%s:%d", proxyUser, PASSWORD, PROXY_HOST, PROXY_PORT)
proxyURL, err := url.Parse(proxyURLString)
if err != nil {
return nil, fmt.Errorf("failed to parse proxy URL: %w", err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
client := &http.Client{
Transport: transport,
}
return client, nil
}
func main() {
targetRegion := "gb" // Great Britain
fmt.Printf("--- Scraping Hacker News from %s ---\n", targetRegion)
// Create our custom, proxy-enabled HTTP client
client, err := createProxyClient(targetRegion)
if err != nil {
log.Fatal(err)
}
// Make the request to Hacker News
resp, err := client.Get("https://news.ycombinator.com")
if err != nil {
log.Fatalf("Failed to scrape Hacker News: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
log.Fatalf("Hacker News returned a non-200 status code: %d %s", resp.StatusCode, resp.Status)
}
// Load the HTML document into goquery
doc, err := goquery.NewDocumentFromReader(resp.Body)
if err != nil {
log.Fatalf("Failed to parse HTML: %v", err)
}
fmt.Println("Top 5 Headlines:")
// Find the story links and print their titles
doc.Find("tr.athing .titleline > a").Each(func(i int, s *goquery.Selection) {
if i < 5 { // Limit to the top 5 for this example
title := s.Text()
fmt.Printf("%d. %s\n", i+1, title)
}
})
}
```
### How to Run
1. Make sure you have Go installed.
2. Install the `goquery` package: `go get github.com/PuerkitoBio/goquery`
3. Save the code as `hn_scraper.go`.
4. Run from your terminal: `go run hn_scraper.go`
### Expected Output
```bash Terminal icon="terminal" theme={null}
--- Scraping Hacker News from gb ---
Top 5 Headlines:
1. Show HN: I built a terminal UI for ChatGPT
2. The unreasonable effectiveness of just showing up everyday
3. Why are manhole covers round?
4. A 16-bit virtual machine from scratch
5. SQLite is not a toy database
```
This example shows how to structure a Go scraping application cleanly, separating the proxy client creation from the main scraping logic. This pattern can be easily extended for concurrent scraping using goroutines.
# Node.js: Axios
Source: https://docs.2extract.com/integrations/frameworks/node-axios
Learn how to use 2extract.com proxies with Axios, the most popular HTTP client for Node.js. Includes a real-world example of scraping structured JSON data.
[Axios](https://axios-http.com/) is a promise-based HTTP client for Node.js and the browser. Integrating 2extract.com proxies is simple and requires passing a `proxy` configuration object with your request.
### Basic Setup
To route your requests through our gateway, you need to provide the `host`, `port`, and `auth` details in the `proxy` object.
You'll need to have `axios` installed in your project: `npm install axios`
```javascript basic_setup.js icon="js" lines wrap theme={null}
const axios = require('axios');
// 1. Get these from your proxy's "Connection Details" page
const proxyHost = "proxy.2extract.net";
const proxyPort = 5555;
const proxyUser = "PROXY_USERNAME";
const proxyPass = "PROXY_PASSWORD";
// 2. Configure the Axios request
const axiosConfig = {
// 3. Set up the proxy object
proxy: {
protocol: 'http',
host: proxyHost,
port: proxyPort,
auth: {
username: proxyUser,
password: proxyPass
}
},
timeout: 10000 // 10 seconds
};
// 4. Make your request!
async function checkIp() {
try {
const response = await axios.get("https://api.ipify.org?format=json", axiosConfig);
console.log("Success! Your proxy IP is:", response.data.ip);
} catch (error) {
if (error.response) {
console.error(`Error making request: Status ${error.response.status}`);
} else {
console.error(`Error making request: ${error.message}`);
}
}
}
checkIp();
```
### Real-World Example: Scraping Reddit API for subreddit data
A common task is to collect structured data from public APIs. Let's use Axios to scrape data from Reddit's JSON API for a highly relevant subreddit: **/r/webscraping**. Reddit, like many sites, may serve different content or ads based on geography. We'll check the "hot" posts from both the US and Great Britain (GB) to demonstrate this capability.
This example shows how to create a reusable function to dynamically change the proxy's country for each request.
```javascript reddit_scraper.js icon="js" lines wrap theme={null}
const axios = require('axios');
// --- Your Base Credentials ---
const BASE_USERNAME = "PROXY_USERNAME";
const PASSWORD = "PROXY_PASSWORD";
const PROXY_HOST = "proxy.2extract.net";
const PROXY_PORT = 5555;
// --- Target Information ---
const SUBREDDIT = "webscraping";
const TARGET_URL = `https://www.reddit.com/r/${SUBREDDIT}/hot.json`;
const REGIONS = ["us", "gb"]; // USA and Great Britain
// --- Reusable Scraper Function ---
async function scrapeSubreddit(region) {
console.log(`--- Scraping /r/${SUBREDDIT} from ${region.toUpperCase()} ---`);
// Dynamically construct the username for the target region
const proxyUsername = `${BASE_USERNAME}-country-${region}`;
const axiosConfig = {
proxy: {
protocol: 'http',
host: PROXY_HOST,
port: PROXY_PORT,
auth: {
username: proxyUsername,
password: PASSWORD
}
},
// Reddit API requires a custom User-Agent
headers: {
'User-Agent': '2extract.com Docs Scraper/1.0'
},
timeout: 15000
};
try {
const response = await axios.get(TARGET_URL, axiosConfig);
// The actual posts are in response.data.data.children
const posts = response.data.data.children;
console.log(`Success! Found ${posts.length} posts.`);
// Print the title of the first post
if (posts.length > 0) {
console.log(`Top post title: "${posts[0].data.title}"`);
}
} catch (error) {
if (error.response) {
// Handle errors from the target or the proxy
console.error(`Request failed with status ${error.response.status}.`);
// The X-2extract-Error header will be in error.response.headers
if (error.response.headers['x-2extract-error']) {
console.error(`--> Gateway Error: ${error.response.headers['x-2extract-error']}`);
}
} else {
console.error(`An unexpected error occurred: ${error.message}`);
}
} finally {
console.log("-" * (30 + SUBREDDIT.length + region.length));
}
}
// --- Main Execution Logic ---
async function run() {
for (const region of REGIONS) {
await scrapeSubreddit(region);
// Optional: add a small delay between requests to different regions
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
run();
```
### Expected Output
Running this script will produce an output similar to this:
```bash Terminal icon="terminal" theme={null}
--- Scraping /r/webscraping from US ---
Success! Found 25 posts.
Top post title: "Looking for advice on scraping dynamic JS-heavy sites"
-----------------------------------------
--- Scraping /r/webscraping from GB ---
Success! Found 25 posts.
Top post title: "Looking for advice on scraping dynamic JS-heavy sites"
-----------------------------------------
```
*(Note: Reddit's content may not vary significantly between US/GB, but this demonstrates the technical capability)*
This example shows how to build a flexible scraper with Axios and 2extract.com, allowing you to reuse your scraping logic while dynamically changing proxy parameters for each targeted request.
# Node.js: Playwright
Source: https://docs.2extract.com/integrations/frameworks/node-playwright
Integrate 2extract.com proxies with Playwright for powerful, cross-browser automation and scraping of modern web applications.
[Playwright](https://playwright.dev/) is a modern Node.js library for browser automation that supports Chromium, Firefox, and WebKit. Its robust feature set and simple API make it an excellent choice for scraping complex, interactive websites.
Integrating 2extract.com proxies with Playwright is done by passing proxy settings directly to the `browser.newContext()` or `browser.newPage()` method.
### Basic Setup
Here’s how to launch a Playwright browser instance that routes all traffic through our proxy gateway.
You'll need `playwright` installed in your project: `npm install playwright`
```javascript basic_setup.js icon="js" lines wrap theme={null}
const { chromium } = require('playwright');
// 1. Get these from your proxy's "Connection Details" page
const proxyHost = "proxy.2extract.net";
const proxyPort = 5555;
const proxyUser = "PROXY_USERNAME";
const proxyPass = "PROXY_PASSWORD";
(async () => {
console.log('Launching browser with proxy...');
const browser = await chromium.launch({
// 2. Pass proxy settings directly to the launch options
proxy: {
server: `http://${proxyHost}:${proxyPort}`,
username: proxyUser,
password: proxyPass
},
headless: false // Set to true for production
});
const context = await browser.newContext();
const page = await context.newPage();
console.log('Navigating to IP checker...');
await page.goto('https://api.ipify.org?format=json');
// 3. Get the content and verify the IP
const content = await page.textContent('body');
console.log('Success! Your proxy IP is:', JSON.parse(content).ip);
await browser.close();
})();
```
In Playwright, proxy credentials are set at the browser or context level. All new pages within that context will automatically use the same proxy settings, which is simpler than Puppeteer's per-page authentication.
### Real-World Example: Checking Flight Prices on Google Flights
Flight prices are a classic example of geo-dependent data. Let's build a script to check the price of a one-way flight from Berlin to London on a specific date, making the request appear as if it's coming from **Germany (DE)**.
```javascript flights_scraper.js icon="js" lines wrap theme={null}
const { chromium } = require('playwright');
// --- Your Base Credentials ---
const BASE_USERNAME = "PROXY_USERNAME";
const PASSWORD = "PROXY_PASSWORD";
const PROXY_HOST = "proxy.2extract.net";
const PROXY_PORT = 5555;
// --- Target Information ---
const DEPARTURE_AIRPORT = "BER"; // Berlin
const ARRIVAL_AIRPORT = "LHR"; // London Heathrow
const DEPARTURE_DATE = "2025-11-07"; // YYYY-MM-DD format
const TARGET_URL = `https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI1LTExLTA3agcIARIDQkVScgcIARIDTEhSQAFIAXABggELCP___________wGYAQI`; // Note: This is a complex, pre-generated URL for BER-LHR on 2025-08-15
const REGION = "de"; // Germany
(async () => {
// Dynamically construct the username for the target region
const proxyUsername = `${BASE_USERNAME}-country-${REGION}`;
console.log("Launching Playwright browser...");
const browser = await chromium.launch({
proxy: {
server: `http://${PROXY_HOST}:${PROXY_PORT}`,
username: proxyUsername,
password: PASSWORD
}
});
const context = await browser.newContext({
// Set a realistic User-Agent and viewport
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
viewport: { width: 1920, height: 1080 },
});
const page = await context.newPage();
console.log(`Navigating to Google Flights via a ${REGION.toUpperCase()} proxy...`);
try {
// Navigate and wait for the results to load
await page.goto(TARGET_URL, { waitUntil: 'load', timeout: 60000 });
// Selector to find the price of the first non-stop flight
// This is a complex selector that may change!
const priceSelector = 'div[role="main"] li[role="listitem"] .YMlIz > div > div:last-child';
// Wait for the price element to be visible
await page.waitForSelector(priceSelector, { timeout: 20000 });
const price = await page.locator(priceSelector).first().textContent();
console.log(`Success! The cheapest non-stop flight price found is: ${price}`);
await page.screenshot({ path: `google_flights_${REGION}.png` });
console.log(`Screenshot saved as 'google_flights_${REGION}.png'`);
} catch (error) {
console.error(`An error occurred: ${error.message}`);
await page.screenshot({ path: 'error_flights.png' });
console.log("Saved an error screenshot to error_flights.png for debugging.");
} finally {
await browser.close();
console.log("Browser closed.");
}
})();
```
**Google is a highly sophisticated target!** The URL structure and CSS selectors on Google Flights are complex and change frequently. This script demonstrates the technical integration, but for reliable, large-scale scraping of Google, you will need to build very robust error handling and adapt your selectors regularly.
### What This Example Demonstrates
* **Cross-Browser Automation:** How to use Playwright's powerful API to control a browser.
* **Simplified Proxy Setup in Playwright:** Shows the modern approach of setting proxy credentials at the browser-launch level.
* **Scraping Dynamic Content:** How to wait for specific elements (`page.waitForSelector`) to appear on a JavaScript-heavy page before trying to extract data.
* **Advanced Locators:** Uses Playwright's `locator` API for more resilient element selection.
# Node.js: Puppeteer
Source: https://docs.2extract.com/integrations/frameworks/node-puppeteer
Learn how to integrate 2extract.com proxies with Puppeteer to scrape dynamic, JavaScript-heavy websites that require a real browser environment.
[Puppeteer](https://pptr.dev/) is a Node.js library that provides a high-level API to control headless Chrome or Chromium. It's essential for scraping modern, JavaScript-driven websites (Single Page Applications).
Integrating 2extract.com proxies with Puppeteer requires passing a special `--proxy-server` argument when launching the browser.
### Basic Setup
Here’s how to launch a Puppeteer instance that routes all its traffic through our proxy gateway.
You'll need `puppeteer` installed in your project: `npm install puppeteer`
```javascript basic_setup.js icon="js" lines wrap theme={null}
const puppeteer = require('puppeteer');
// 1. Get these from your proxy's "Connection Details" page
const proxyHost = "proxy.2extract.net";
const proxyPort = 5555;
const proxyUser = "PROXY_USERNAME";
const proxyPass = "PROXY_PASSWORD";
const proxyServer = `http://${proxyHost}:${proxyPort}`;
(async () => {
console.log('Launching browser with proxy...');
const browser = await puppeteer.launch({
headless: false, // Set to true for production, false for debugging
// 2. Pass the proxy server URL as an argument
args: [`--proxy-server=${proxyServer}`]
});
const page = await browser.newPage();
// 3. Authenticate the proxy for this page
await page.authenticate({
username: proxyUser,
password: proxyPass
});
console.log('Navigating to IP checker...');
await page.goto('https://api.ipify.org?format=json', { waitUntil: 'networkidle0' });
// 4. Get the content and verify the IP
const content = await page.evaluate(() => document.body.textContent);
console.log('Success! Your proxy IP is:', JSON.parse(content).ip);
await browser.close();
})();
```
**Important:** Puppeteer requires you to authenticate on a per-page basis using `page.authenticate()`. You must call this method for every new page (`browser.newPage()`) you open.
### Real-World Example: Taking a Screenshot of Amazon Search Results
A common use case for Puppeteer is to render a full page with dynamic content and take a screenshot, for example, to monitor product rankings or search results on a major eCommerce site like Amazon.
Let's take a screenshot of the search results for **"web scraping books"** on `amazon.com`, making the request appear as if it's coming from the **United States**.
```javascript amazon_scraper.js icon="js" lines wrap theme={null}
const puppeteer = require('puppeteer');
// --- Your Base Credentials ---
const BASE_USERNAME = "PROXY_USERNAME";
const PASSWORD = "PROXY_PASSWORD";
const PROXY_HOST = "proxy.2extract.net";
const PROXY_PORT = 5555;
const proxyServer = `http://${PROXY_HOST}:${PROXY_PORT}`;
// --- Target Information ---
const SEARCH_QUERY = "web scraping books";
const TARGET_URL = `https://www.amazon.com/s?k=${encodeURIComponent(SEARCH_QUERY)}`;
const REGION = "us"; // United States
(async () => {
console.log("Launching Puppeteer browser...");
const browser = await puppeteer.launch({
headless: true, // Use true for automated scripts
args: [`--proxy-server=${proxyServer}`]
});
const page = await browser.newPage();
// Dynamically construct the username for the target region
const proxyUsername = `${BASE_USERNAME}-country-${REGION}`;
// Authenticate using the dynamically created username
await page.authenticate({
username: proxyUsername,
password: PASSWORD
});
// Set a realistic viewport and user agent to mimic a real user
await page.setViewport({ width: 1920, height: 1080 });
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36');
console.log(`Navigating to Amazon search results for "${SEARCH_QUERY}" via a ${REGION.toUpperCase()} proxy...`);
try {
// Navigate to the page and wait for the network to be mostly idle
await page.goto(TARGET_URL, { waitUntil: 'networkidle2', timeout: 60000 });
// (Optional) A small delay to ensure all dynamic content loads
await new Promise(resolve => setTimeout(resolve, 2000));
// Take a screenshot and save it
await page.screenshot({ path: `amazon_search_${REGION}.png`, fullPage: true });
console.log(`Success! Screenshot saved as 'amazon_search_${REGION}.png'`);
} catch (error) {
console.error(`An error occurred: ${error.message}`);
// In case of an error, it's useful to save the HTML for debugging
const errorHtml = await page.content();
require('fs').writeFileSync('error.html', errorHtml);
console.log("Saved the page's HTML to error.html for debugging.");
} finally {
await browser.close();
console.log("Browser closed.");
}
})();
```
**Amazon is a challenging target!** They employ sophisticated anti-bot measures. While this script works, you may need to implement more advanced techniques for large-scale scraping, such as rotating User-Agents, handling CAPTCHAs, and mimicking human-like browsing behavior (e.g., random delays, mouse movements).
### What This Example Demonstrates
* **Scraping a Real, Complex Website:** How to approach a major target like Amazon.
* **Proxy Authentication in Puppeteer:** The correct two-step process of setting `--proxy-server` and using `page.authenticate()`.
* **Dynamic Geo-Targeting:** Shows how to change your perceived location by modifying the username.
* **Mimicking a Real User:** Demonstrates best practices like setting a realistic viewport and `User-Agent` to reduce the chance of being detected by anti-bot systems.
* **Error Handling:** Includes a `try...catch` block and saves the page's HTML on failure, which is a crucial technique for debugging scraping issues.
# Python: Requests
Source: https://docs.2extract.com/integrations/frameworks/python-requests
Learn how to use 2extract.com proxies with the popular Python Requests library to scrape data from a real-world target like the Steam store.
The `requests` library is the most popular way to make HTTP requests in Python. Integrating 2extract.com proxies is incredibly simple.
### Basic Setup
To use our proxies, you just need to construct a `proxies` dictionary and pass it to your request. The dictionary should contain both `http` and `https` keys.
```python basic_setup.py icon="python" lines wrap theme={null}
import requests
# 1. Get these from your proxy's "Connection Details" page
proxy_host = "proxy.2extract.net"
proxy_port = 5555
proxy_user = "PROXY_USERNAME"
proxy_pass = "PROXY_PASSWORD"
# 2. Construct the proxy URL
proxy_url = f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
# 3. Set up the proxies dictionary
proxies = {
"http": proxy_url,
"https": proxy_url,
}
# 4. Make your request!
try:
response = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=10)
response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx)
print("Success! Your proxy IP is:", response.json()['ip'])
except requests.exceptions.RequestException as e:
print(f"Error making request: {e}")
```
### Real-World Example: Scraping Steam Game Prices
Let's solve a real problem: checking the price of a popular game, like Counter-Strike 2, in different regions. Many online stores have regional pricing, and using proxies is the only way to see what local users see.
In this example, we'll check the price in the USA and Turkey by dynamically changing the -country parameter in the username.
This example requires `requests` and `BeautifulSoup4`. Install them with `pip install requests beautifulsoup4`.
```python steam_scraper.py icon="python" lines wrap theme={null}
import requests
from bs4 import BeautifulSoup
# --- Your Base Credentials ---
BASE_USERNAME = "PROXY_USERNAME"
PASSWORD = "PROXY_PASSWORD"
PROXY_HOST_PORT = "proxy.2extract.net:5555"
# --- Target Information ---
GAME_APP_ID = "730" # Counter-Strike 2 AppID
TARGET_URL = f"https://store.steampowered.com/app/{GAME_APP_ID}/"
REGIONS = ["us", "tr"] # USA and Turkey
# --- Main Scraper Logic ---
for region in REGIONS:
print(f"--- Checking price in {region.upper()} ---")
# Dynamically construct the username for each region
proxy_username = f"{BASE_USERNAME}-country-{region}"
proxies = {
"http": f"http://{proxy_username}:{PASSWORD}@{PROXY_HOST_PORT}",
"https": f"http://{proxy_username}:{PASSWORD}@{PROXY_HOST_PORT}",
}
# We must also pass the region code to Steam to get the correct store page
# and cookies to bypass the age gate check.
params = {'cc': region}
cookies = {'birthtime': '568022401', 'wants_mature_content': '1'}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
try:
response = requests.get(
TARGET_URL,
proxies=proxies,
params=params,
cookies=cookies,
headers=headers,
timeout=15
)
response.raise_for_status()
# Parse the HTML to find the price
soup = BeautifulSoup(response.text, 'html.parser')
price_element = soup.find('div', class_='game_purchase_price')
if price_element:
print(f"Success! Price found: {price_element.get_text(strip=True)}")
else:
# Maybe it's on sale?
discount_price_element = soup.find('div', class_='discount_final_price')
if discount_price_element:
print(f"Success! Discount price found: {discount_price_element.get_text(strip=True)}")
else:
print("Could not find the price element on the page.")
except requests.exceptions.ProxyError as e:
print(f"Proxy Error! Check your credentials or balance. Details: {e}")
except requests.exceptions.HTTPError as e:
print(f"HTTP Error! The target website blocked us. Status code: {e.response.status_code}")
except requests.exceptions.RequestException as e:
print(f"An unexpected error occurred: {e}")
print("-" * (25 + len(region)))
```
#### Expected Output
Running this script will produce an output similar to this:
```bash Terminal icon="terminal" theme={null}
--- Checking price in US ---
Success! Price found: $14.99
--------------------------
--- Checking price in TR ---
Success! Discount price found: ₺265,50
--------------------------
```
This example demonstrates the power of dynamically controlling your proxy's location directly from your code, allowing you to build powerful, scalable data collection applications.
# Python: Scrapy
Source: https://docs.2extract.com/integrations/frameworks/python-scrapy
Integrate 2extract.com proxies into your Scrapy projects for robust, large-scale web scraping. Learn best practices with a real-world example.
[Scrapy](https://scrapy.org/) is a powerful framework for large-scale web scraping. The best way to manage proxies in Scrapy is by using a custom **Downloader Middleware**. This allows you to centralize your proxy logic and keep your spiders clean.
### Step 1: Create the Proxy Middleware
First, let's create a middleware that will attach our proxy credentials to every request.
1. In your Scrapy project, open the `middlewares.py` file.
2. Add the following class. It reads credentials from your `settings.py` and can be easily extended to handle dynamic parameters.
```python middlewares.py icon="python" lines wrap theme={null}
# my_project/middlewares.py
import base64
class Scrapy2extractProxyMiddleware:
def process_request(self, request, spider):
# By default, use the static proxy settings
proxy_user = spider.settings.get('PROXY_USER')
proxy_pass = spider.settings.get('PROXY_PASS')
# Allow spiders to dynamically override proxy settings per-request
if 'proxy_username_params' in request.meta:
params = request.meta['proxy_username_params']
proxy_user = f"{spider.settings.get('PROXY_USER')}{params}"
# Set the proxy for the request
request.meta['proxy'] = f"http://{spider.settings.get('PROXY_HOST')}:{spider.settings.get('PROXY_PORT')}"
# Set the Proxy-Authorization header for authentication
proxy_auth = f"{proxy_user}:{proxy_pass}"
auth_header = 'Basic ' + base64.b64encode(proxy_auth.encode()).decode()
request.headers['Proxy-Authorization'] = auth_header
spider.logger.info(f"Using proxy user: {proxy_user} for {request.url}")
```
This advanced middleware allows you to pass dynamic parameters (like `-country-de`) from your spider to the middleware using `request.meta['proxy_username_params']`.
### Step 2: Configure `settings.py`
Now, let's enable the middleware and add your credentials.
1. Open your `settings.py` file.
2. Add your base proxy credentials.
3. Enable the `Scrapy2extractProxyMiddleware` in `DOWNLOADER_MIDDLEWARES`.
```python settings.py icon="python" lines wrap theme={null}
# my_project/settings.py
# --- 2extract.com Proxy Credentials ---
PROXY_HOST = "proxy.2extract.net"
PROXY_PORT = 5555
PROXY_USER = "PROXY_USERNAME" # Without any parameters
PROXY_PASS = "PROXY_PASSWORD"
# --- Enable the Middleware ---
# The number (e.g., 610) should be high enough to run after default middlewares,
# but before any middlewares that might depend on the proxy.
DOWNLOADER_MIDDLEWARES = {
'my_project.middlewares.Scrapy2extractProxyMiddleware': 610,
}
```
**Your basic setup is now complete!** Any request from any spider in your project will now automatically use your 2extract.com proxy.
### Real-World Example: Scraping Steam Specials
Now, let's use the middleware we just created to scrape all discounted games from the Steam store. This spider is now much cleaner because all the proxy logic lives in the middleware.
### The Spider (`steam_specials_spider.py`)
Notice how clean this spider is. It only focuses on scraping logic and passing dynamic parameters to the middleware.
```python spiders/steam_specials_spider.py icon="python" lines wrap theme={null}
import scrapy
import random
class SteamSpecialsSpider(scrapy.Spider):
name = "steam_specials"
start_urls = ["https://store.steampowered.com/specials"]
def start_requests(self):
# Create a unique session ID for this job
session_id = f"steam-special-{random.randint(1000, 9999)}"
# Define the parameters we want to pass to our middleware
# We will use the same sticky session for all pages
proxy_params = f"-country-us-session-{session_id}"
cookies = {'birthtime': '568022401', 'wants_mature_content': '1', 'steamCountry': 'US|...'}
for url in self.start_urls:
yield scrapy.Request(
url,
callback=self.parse,
# Pass our dynamic parameters to the middleware
meta={'proxy_username_params': proxy_params},
cookies=cookies,
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
)
def parse(self, response):
# Extract data from the current page
games = response.css('a.salepreviewwidgets_SaleItemBrowserRow_y9MSd')
if not games:
self.logger.warning("No games found on page. The CSS selector might be outdated.")
return
for game in games:
yield {
'title': game.css('div.salepreviewwidgets_StoreSaleWidgetTitle_3jI46::text').get(),
'original_price': game.css('div.salepreviewwidgets_StoreOriginalPrice_2e_2G::text').get(),
'discount_price': game.css('div.salepreviewwidgets_StoreSalePriceBox_Wh0L8::text').get(),
}
# Find and follow the "Next" page link
next_page_link = response.css('a.paging_Arrow_2JZe3[href*="specials?page="]:last-of-type').get()
if next_page_link:
# Scrapy automatically carries over the `meta` dictionary,
# so our middleware will continue to use the same session!
yield response.follow(next_page_link, callback=self.parse)
else:
self.logger.info("Last page reached. Finishing crawl.")
```
**CSS Selectors change!** Websites like Steam frequently update their design. The CSS selectors in this example are correct at the time of writing but may need to be updated in the future.
### What This Example Demonstrates
* **Best Practice:** The spider is clean and focused on **what** to scrape. The middleware handles **how** to connect. This is a robust and scalable approach.
* **Dynamic Control:** The spider can easily change its geo-location or session for any request by simply changing the `proxy_username_params` value in the `meta` dictionary.
* **Code Reusability:** The `Scrapy2extractProxyMiddleware` can now be reused by **all spiders** in your project without duplicating code.
# Introduction
Source: https://docs.2extract.com/integrations/introduction
Learn how to integrate 2extract.com proxies with your favorite scraping frameworks, anti-detect browsers, and proxy management tools.
## Integrate 2extract in Minutes
Welcome to the integration hub! Our goal is to make connecting to the 2extract.com network as seamless and fast as possible, no matter what tool you use.
Our proxies are designed to be compatible with any application that supports standard **HTTP/S** or **SOCKS5** protocols. Whether you're building a custom scraper, managing profiles in an anti-detect browser, or just need to route your traffic, we've got you covered.
### Find Your Tool
This section provides step-by-step, copy-paste ready guides for the most popular tools in the data collection ecosystem. Choose your category to get started:
Get code examples for integrating with popular libraries and frameworks like Python Requests, Scrapy, Puppeteer, and Playwright.
Find step-by-step visual guides on how to configure our proxies in browsers like AdsPower, Dolphin Anty, and Multilogin.
Learn how to set up our proxies in system-level tools like FoxyProxy, SwitchyOmega, and Proxifier for easy browser or application-wide routing.
***
### The Core Principle: `username:password@host:port`
No matter which tool you use, the integration always comes down to providing these four pieces of information, which you can find in your proxy's settings:
1. **Host:** `proxy.2extract.net`
2. **Port:** `5555`
3. **Username:** (Your proxy's username, e.g., `2xt-customer-...`)
4. **Password:** (Your proxy's password)
**Don't forget the power of parameters!** You can add geo-targeting and session control parameters directly to your `username` to change the proxy's behavior on the fly. Learn more in the **[Configuration Guide](/proxy-products/configuration/authentication)**.
```bash cURL (Example) theme={null}
curl --proxy PROXY_USERNAME:PROXY_PASSWORD@proxy.2extract.net:5555 "https://ipinfo.io/country"
```
# FoxyProxy (Browser Extension)
Source: https://docs.2extract.com/integrations/tools/foxyproxy
Learn how to easily set up and manage your 2extract.com proxies directly in your browser using the FoxyProxy extension.
FoxyProxy is a popular browser extension for Chrome and Firefox that allows you to manage and switch between multiple proxies quickly. It's a great tool for manual testing or browsing from a specific location.
### Step 1: Install FoxyProxy
If you haven't already, install the FoxyProxy Standard extension from your browser's official store:
* **[FoxyProxy for Chrome](https://chrome.google.com/webstore/detail/foxyproxy-standard/gcknhkkoolaabfmlnjonogaaifnjlfnp)**
* **[FoxyProxy for Firefox](https://addons.mozilla.org/en-US/addon/foxyproxy-standard/)**
### Step 2: Open FoxyProxy Options
Once installed, click the FoxyProxy icon in your browser's toolbar and select **Options**.
### Step 3: Add a New Proxy
In the FoxyProxy options page, click the **Add New Proxy** button on the left sidebar.
### Step 4: Configure Your 2extract.com Proxy
Now, fill in the proxy details.
1. **Proxy Type:** Select **HTTP**.
2. **Title:** Give your proxy a descriptive name, e.g., `2extract - US Residential`.
3. **Proxy IP Address:** Enter `proxy.2extract.net`.
4. **Port:** Enter your proxy's specific port number (e.g., `5555`).
5. **Username:** Enter your proxy's `Username`.
6. **Password:** Enter your proxy's `Password`.
**Want to target a specific country?** Just add the `-country-[code]` parameter to your `Username` right here in the FoxyProxy settings. For example: `PROXY_USERNAME-country-de`.
7. Click **Save**.
### Step 5: Activate and Use Your Proxy
Now you can easily switch to your 2extract.com proxy.
1. Click the FoxyProxy icon in your browser's toolbar.
2. Select the proxy profile you just created (e.g., `2extract - US Residential`).
3. The extension icon will change color, indicating that the proxy is active.
To verify it's working, visit a site like [IPinfo.io](https://ipinfo.io/what-is-my-ip). You should see the IP address and location of your proxy, not your own.
To stop using the proxy, simply click the FoxyProxy icon again and select **Turn Off**.
# Proxifier (Proxy Manager)
Source: https://docs.2extract.com/integrations/tools/proxifier
Route traffic from any application on your Windows or macOS system through 2extract.com using Proxifier.
Proxifier is a powerful application that allows you to redirect the network connections of any application through a proxy server. This is extremely useful for applications that do not have their own internal proxy settings.
### Step 1: Open Proxy Server Settings
First, launch Proxifier.
* On **Windows**, go to `Profile -> Proxy Servers...`
* On **macOS**, go to `Proxies` in the main configuration window.
Click the **Add...** button.
### Step 2: Enter Server Address and Port
In the new window, enter your proxy's host and port:
1. **Address:** `proxy.2extract.net`
2. **Port:** Enter your proxy's specific port number (e.g., `5555`).
3. **Protocol:** Select **HTTPS** from the protocol list.
### Step 3: Enable Authentication
Now, enable authentication and enter your credentials:
1. Check the **Enable** box in the "Authentication" section.
2. **Username:** Enter your proxy's `Username`.
3. **Password:** Enter your proxy's `Password`.
4. Click **OK**.
**Using Geo-Targeting:** You can add parameters like `-country-de` directly to your username in this field to control your location.
### Step 4: Confirm and Create a Proxification Rule
Proxifier will ask if you want to use this proxy for all traffic by default. It's better to create a specific rule.
1. Click **No** in the confirmation dialog. This will open the "Proxification Rules" editor.
2. Click **Add...** to create a new rule.
3. **Name:** Give your rule a name (e.g., `Chrome via 2extract`).
4. **Applications:** Click "Browse..." and select the application you want to route through the proxy (e.g., `chrome.exe`).
5. **Action:** In the "Action" dropdown, select your newly created proxy (e.g., `Proxy HTTPS proxy.2extract.net`).
6. Click **OK** to save the rule.
### Step 5: Verify the Connection
Your setup is complete. Now, when you use the application you selected (e.g., Chrome), all its traffic will be routed through your 2extract.com proxy.
You can verify this by:
* **Watching the Proxifier main window:** You will see live connection logs for your application.
* **Visiting an IP checker website** (like [IPinfo.io](https://ipinfo.io/what-is-my-ip)) within the proxified application. You should see the IP of your proxy, not your own.
# Shadowrocket (Proxy Manager)
Source: https://docs.2extract.com/integrations/tools/shadowrocket
Learn how to configure 2extract.com proxies in Shadowrocket for system-wide proxying on your iOS or macOS device.
Shadowrocket is a powerful, rule-based proxy utility client for iOS and macOS. It allows you to route all your device's traffic, or just specific apps, through a proxy.
### Step 1: Add a New Proxy
1. Open the Shadowrocket app.
2. On the main "Home" tab, tap **Add Server**.
### Step 2: Select Proxy Type
In the "Add Server" screen, you need to specify the connection type.
1. Tap on **Type**.
2. Scroll through the list and select **HTTP**.
### Step 3: Enter Server and Authentication Details
Now, fill in all the necessary credentials for your 2extract.com proxy.
1. **Host:** Enter `proxy.2extract.net`.
2. **Port:** Enter your proxy's specific port number (e.g., `5555`).
3. **User:** Enter your proxy's `Username`.
4. **Password:** Enter your proxy's `Password`.
5. **Remark (Optional):** Give your proxy a descriptive name, like `2extract US Residential`.
**Geo-Targeting Tip:** To target a specific country, add the `-country-[code]` parameter directly to your username in the `User` field. For example: `PROXY_USERNAME-country-de`.
6. Tap **"Done"** in the top right corner to save the server.
### Step 4: Connect to the Proxy
You're now ready to start routing your traffic.
1. Back on the "Home" tab, you will see your newly added proxy profile.
2. Tap the **toggle switch** at the top of the screen (next to "Not Connected").
3. If it's your first time, iOS/macOS will ask for permission to add a VPN configuration. Tap **Allow** and confirm with your device's passcode or Touch/Face ID.
The status will change to "Connected", and the toggle switch will turn green. All your device's traffic is now being routed through your 2extract.com proxy.
To verify, open a browser and visit an IP checker website like [IPinfo.io](https://ipinfo.io/what-is-my-ip). You should see the IP and location of your proxy. To disconnect, simply tap the toggle switch again.
# ZeroOmega (ex-SwitchyOmega) (Browser Extension)
Source: https://docs.2extract.com/integrations/tools/switchyomega
Set up and manage your 2extract.com proxies with fine-grained control using the powerful ZeroOmega browser extension.
ZeroOmega (ex-SwitchyOmega) is an advanced proxy management extension for Chrome and Firefox. It's perfect for developers who need to create custom rules for when and how to use a proxy.
### Step 1: Install ZeroOmega
First, install the ZeroOmega extension from your browser's official store:
* **[ZeroOmega for Chrome](https://chromewebstore.google.com/detail/pfnededegaaopdmhkdmcofjmoldfiped)**
### Step 2: Create a New Profile
After installation, the ZeroOmega options page will open automatically.
1. Click **New profile...** in the left sidebar.
2. In the popup window:
* **Profile name:** Give it a clear name, like `2extract Residential`.
* **Profile type:** Select **Proxy Profile**.
* Click **Create**.
### Step 3: Configure the Proxy Server
Now, you'll configure the new profile to use your 2extract.com proxy.
1. **Protocol:** Select **HTTP** from the dropdown menu.
2. **Server:** Enter `proxy.2extract.net`.
3. **Port:** Enter your proxy's specific port number (e.g., `5555`).
### Step 4: Add Authentication
Since our proxies require authentication, you need to add your credentials.
1. Click the **lock icon** next to the port number.
2. A new window will pop up. Enter your `Username` and `Password`.
3. Click **Save changes**.
**Tip for Geo-Targeting:** You can easily switch countries by creating multiple profiles in ZeroOmega, each with a different geo-targeting parameter in the username (e.g., `PROXY_USERNAME-country-de` for Germany, `PROXY_USERNAME-country-fr` for France).
### Step 5: Apply Changes and Activate
Finally, save your configuration and start using the proxy.
1. Click the green **Apply changes** button in the left sidebar to save all your settings.
2. Click the ZeroOmega icon in your browser's toolbar.
3. Select the profile you just created (`2extract Residential`).
Your browser traffic is now routed through your 2extract.com proxy. You can verify this by visiting an IP checker website like [IPinfo.io](https://ipinfo.io/what-is-my-ip). To disconnect, select **Direct Connection** from the ZeroOmega menu.
# Acceptable Use Policy (AUP)
Source: https://docs.2extract.com/legal/acceptable-use-policy
Our commitment to maintaining a secure, ethical, and responsible proxy network. Read the rules of the road for using 2extract.com.
This Acceptable Use Policy ("AUP") is an integral part of our **[Terms of Service](/legal/terms)** and governs your use of all services provided by 2extract.com ("Services"). Its purpose is to protect the integrity, security, and reputation of the 2extract.com network, our users, and the internet community as a whole.
By using our Services, you agree to comply with this AUP. We may modify this policy at any time, and your continued use of the Services constitutes acceptance of the modified policy.
### 1. General Principles
You agree not to use the Services for any purpose that is illegal, unethical, or harmful. You are solely responsible for the legality and appropriateness of your actions while using our network. This includes, but is not limited to, the following principles:
* You must not violate any applicable laws or regulations.
* You must not infringe on the rights of any third party (intellectual property, privacy, etc.).
* You must not take any action that harms our Services, network, reputation, or other users.
### 2. Specifically Prohibited Activities
The following is a non-exhaustive list of activities that are **strictly prohibited**. Engaging in any of these will result in immediate suspension or termination of your account without refund.
* **Hacking and Unauthorized Access:** Accessing any computer system, network, or data without authorization. This includes port scanning, vulnerability scanning, and any form of penetration testing against third-party systems.
* **Distribution of Malicious Software:** Transmitting or distributing any form of malware, viruses, worms, trojans, spyware, or any other malicious code.
* **Phishing and Fraud:** Creating phishing websites, engaging in identity theft, credit card fraud (carding), or any other fraudulent financial activity.
* **Spamming:** Sending any form of unsolicited bulk email (spam).
* **Denial-of-Service (DoS) Attacks:** Launching DoS, DDoS, or any other type of attack designed to disrupt service availability.
* **Peer-to-Peer (P2P) File Sharing:** Using our network for torrenting or other P2P activities.
* **Cryptocurrency Mining:** Using our resources for any form of cryptocurrency mining.
* **Ad Fraud:** Engaging in fraudulent ad clicking or impression fraud.
* **Account Creation Abuse:** Creating fake accounts on social media or other platforms in a manner that violates their terms of service.
* **Scalping:** Using automated bots for ticket scalping or purchasing limited-edition goods (e.g., sneaker bots).
* **Deceptive Marketing:** Engaging in any form of false advertising or deceptive practices.
### 3. Content Restrictions
You may not use our Services to access, transmit, or distribute any of the following content:
**Zero-Tolerance Policy:** We have a zero-tolerance policy for any activity related to **Child Sexual Abuse Material (CSAM)**. Any such activity will be immediately reported to law enforcement authorities.
* **Hate Speech:** Content that is defamatory, harassing, abusive, or promotes violence or hatred.
* **Obscene or Illegal Content:** Any other content that is illegal or obscene under applicable law.
### 4. Enforcement and Consequences
We reserve the right to investigate any suspected violation of this AUP. If we determine a violation has occurred, we may take any or all of the following actions, without prior notice:
* Issue a warning.
* Immediately **suspend** your access to the Services.
* Immediately **terminate** your account.
* Block access to certain target domains from our network.
Violations of this AUP will result in the forfeiture of any right to a refund.
We reserve the right to cooperate fully with law enforcement authorities or court orders requesting us to disclose the identity of anyone engaging in prohibited activities.
### 5. Reporting Abuse
If you become aware of or suspect that the 2extract.com network is being used for any purpose that violates this AUP, please contact us immediately.
Email us at **[support@2extract.com](mailto:support@2extract.com)**. Please provide as much detail as possible to assist in our investigation.
# Privacy Policy
Source: https://docs.2extract.com/legal/privacy
How we collect, use, and protect your data.
### Last Updated: 15.07.2025
### 1. Introduction
Welcome to 2extract.com. Your privacy is critically important to us. This Privacy Policy explains how **POLYDAN PTE. LTD.** (“2extract”, “we”, “us”, or “our”) collects, uses, shares, and protects your personal information when you use our website, [https://2extract.com](https://2extract.com) (the “Site”), and our proxy services (collectively, the “Services”).
This policy is a legally binding agreement. By creating an account or using our Services, you agree to the terms outlined in this document.
#### In Short: What You Need to Know
* **Who is in charge of your data?** POLYDAN PTE. LTD., a Singaporean company, is the Data Controller for your information.
* **Why do we process your data?** Primarily to provide, secure, and improve our Services, process your payments, and communicate with you.
* **What are your rights?** You have the right to access, correct, delete, and restrict the processing of your data, among others. You can exercise these rights by contacting us.
* **Do we use cookies?** Yes, we use necessary and analytical cookies to make our Site work and to improve it. You can manage your preferences at any time.
For a detailed explanation, please read the full policy below.
### 2. Who We Are and How to Contact Us
The data controller for your personal information is:
**POLYDAN PTE. LTD.**
68 Circular Road, #02-01, Singapore (049422)
If you have any questions about this Privacy Policy or wish to exercise your data rights, please contact our data privacy team at: [support@2extract.com](mailto:support@2extract.com).
3. What Information We Collect
We collect information to provide and improve our Services. This data can be grouped as follows:
* **Identity & Contact Data:** Your full name (optional), email address, and password (which we store in an encrypted format).
* **Financial Data:** We do not store your full credit card details. When you pay, this information is processed directly by our payment partner (Stripe). We only store transaction history, payment method type, and the last four digits of your card for reference.
* **Technical Data:** Your IP address, browser type and version, operating system, and device type. We collect this for security, fraud prevention, and to improve our service.
* **Usage Data:** Information about how you use our Services, such as traffic consumed by your proxies, API requests made, and features you interact with in your dashboard. This includes server logs.
4. How and Why We Use Your Data (Purpose and Legal Basis)
We only use your personal data when the law allows us to. Here’s a breakdown of our data processing activities, based on the principles of GDPR:
| Purpose of Processing | Data Types Used | Legal Basis for Processing |
| ----------------------------------------------------------------------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------- |
| **To register you and create your account** | Identity & Contact | Performance of a contract with you. |
| **To provide and manage the Service** | Identity, Contact, Financial, Technical, Usage | Performance of a contract with you. |
| **To process your payments and manage billing** | Identity, Financial | Performance of a contract with you. |
| **To manage our relationship with you (e.g., sending service notifications, updates to terms)** | Identity, Contact | Performance of a contract; Necessary for our legitimate interests (to keep you informed). |
| **To secure our platform and prevent fraud** | Identity, Technical, Usage | Necessary for our legitimate interests (to protect our business and users). |
| **To improve our Site and Services** | Technical, Usage (Aggregated) | Necessary for our legitimate interests (to develop our product). |
| **To comply with legal obligations** | All relevant data | Necessary to comply with a legal obligation. |
| **To send marketing communications (if you opt-in)** | Contact | Your explicit consent. |
### 5. Who We Share Your Information With
We do not sell your personal data. We only share it with trusted third-party service providers (sub-processors) to the extent necessary to provide our Services. These include:
* **Payment Processors:** Such as Stripe, to securely handle your payments.
* **Cloud & Hosting Providers:** To host our application and store data.
* **Customer Support Platforms:** Such as Intercom or Help Scout, to manage our communication with you.
* **Analytics Services:** Such as Google Analytics, to help us understand how our Site is used.
* **Email Service Providers:** To send you transactional and marketing emails.
We may also disclose your data if required by law, court order, or governmental request to protect our rights or the safety of others.
### 6. International Data Transfers
Our company is based in Singapore. Some of our service providers may be located outside of your jurisdiction. When we transfer your data internationally, we ensure it is protected by implementing appropriate safeguards, such as using Standard Contractual Clauses (SCCs) approved by relevant authorities, to ensure your data is treated securely and in accordance with this Privacy Policy.
### 7. Data Retention
We retain your personal data only for as long as necessary to fulfill the purposes for which it was collected.
* **Account Data:** We retain your profile and usage data as long as your account is active.
* **Inactive Accounts:** If your account remains inactive for 12 months, we reserve the right to close it and schedule your personal data for deletion.
* **Legal Obligations:** We may retain certain financial and transactional data for longer periods (e.g., 5-7 years) to comply with tax and accounting laws.
### 8. Your Data Protection Rights
Depending on your location (especially if you are in the European Economic Area), you have the following rights regarding your personal data:
* **Right to Access:** You can request a copy of the personal data we hold about you.
* **Right to Rectification:** You can request to correct any inaccurate or incomplete data.
* **Right to Erasure (“Right to be Forgotten”):** You can request that we delete your personal data.
* **Right to Restrict Processing:** You can request that we limit the processing of your data.
* **Right to Data Portability:** You can request to receive your data in a machine-readable format.
* **Right to Object:** You can object to us processing your data for certain purposes (like direct marketing).
* **Right to Withdraw Consent:** If we process data based on your consent, you can withdraw it at any time.
To exercise any of these rights, please contact us at [support@2extract.com](mailto:support@2extract.com).
### 9. Cookie Policy
We use cookies to make our Site and Services functional and to improve your experience.
* What are cookies? Small text files stored on your device when you visit a website.
* How we use them:
| Cookie Category | Purpose | Examples |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
| Essential Cookies | Necessary for core website functions like logging you in and maintaining your session. Our Site cannot work without them. | session\_id, auth\_token |
| Analytics Cookies | Help us understand how visitors interact with our Site by collecting anonymous information. | Google Analytics (\_ga, \_gid) |
| Functional Cookies | Used by third-party tools we integrate, such as our live chat support. | Intercom, Help Scout |
* Your Choices: When you first visit our Site, you will be asked to consent to our use of non-essential cookies via a cookie banner. You can manage your preferences at any time. For more information, visit allaboutcookies.org.
### 10. Specific Notices for Residents of Certain Regions
* **For Residents of the European Economic Area (EEA):** We process your data in accordance with the General Data Protection Regulation (GDPR). All rights listed in Section 8 are fully applicable.
* **For Residents of California (CCPA):** This notice supplements the information in our Privacy Policy. We collect categories of personal information as described in Section 3. We do not "sell" your personal information as defined by the CCPA. You have the right to know what data we collect, to request its deletion, and to not be discriminated against for exercising your rights. To make a request, please contact us.
### 11. Changes to This Privacy Policy
We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the new policy on this page and, if the changes are significant, by sending you an email notification.
### 12. Children's Privacy
Our Services are not intended for use by individuals under the age of 18. We do not knowingly collect personal data from children. If you believe we have done so, please contact us immediately.
# Terms of Service
Source: https://docs.2extract.com/legal/terms
Check out our Terms of Service to know the rules while using our platform.
### Last Updated: 15.07.2025
This Terms of Service Agreement (the “Agreement”) is a legally binding agreement between you or the entity you represent (“Client”, “you”, or “your”) and **POLYDAN PTE. LTD**, a company registered in **Singapore** with address at **68 Circular Road, #02-01** (“2extract”, “we”, “us”, or “our”).
This Agreement governs your access to and use of the 2extract.com website (the “Site”), our proxy network, and any related services, applications, and features (collectively, the “Services”). This Agreement takes effect when you create an account on our Site or, if earlier, when you first access or use our Services (the “Effective Date”).
If you are using the Services on behalf of an entity, you represent and warrant that you have the legal authority to bind that entity to this Agreement.
**PLEASE READ THIS AGREEMENT CAREFULLY. BY CREATING AN ACCOUNT OR USING OUR SERVICES, YOU ACKNOWLEDGE THAT YOU HAVE READ, UNDERSTOOD, AND AGREE TO BE BOUND BY THESE TERMS.**
### 1. Account Registration and Security
1.1. **Eligibility.** To use the Services, you must be at least 18 years old and of legal age to form a binding contract in your jurisdiction. You must provide accurate, current, and complete information during the registration process.
1.2. **Account Security.** You are solely responsible for maintaining the confidentiality of your account credentials (password, API tokens) and for all activities that occur under your account. You agree to notify us immediately of any unauthorized use of your account. Sharing account privileges is strictly prohibited and may result in account suspension.
1.3. **Compliance and Verification.** We reserve the right to perform compliance reviews, including Know Your Client (KYC) verification, to prevent fraud and misuse. You agree to cooperate and provide any information reasonably required for this process.
1.4. **Sanctions and Prohibited Persons.** You represent and warrant that you are not on any government Sanctions List (e.g., U.S. OFAC, UK Sanctions List) and are not located in a jurisdiction subject to comprehensive trade sanctions. You agree not to use the Services in or for the benefit of any sanctioned country or person.
### 2. The Services
2.1. **License.** Subject to your compliance with this Agreement, we grant you a limited, non-exclusive, non-transferable, and revocable license to access and use our proxy network and management dashboard solely for your internal business operations or personal use, in accordance with your selected plan.
2.2. **Service Types.** We offer access to different types of proxies, including but not limited to Residential and Mobile proxies. The specific features, performance characteristics, and pricing for each type are described on our Site.
2.3. **Modifications.** We reserve the right to modify, update, or discontinue any part of the Services at any time. We will provide reasonable notice for any material changes that may adversely affect your use of the Services.
### 3. Client Responsibilities and Acceptable Use
3.1. **Lawful Use.** You agree to use the Services only for lawful purposes and in compliance with all applicable local, state, national, and international laws and regulations. You are solely responsible for any data you access or transmit through our Services.
3.2. **Prohibited Activities.** You shall not, and shall not permit any third party to, use the Services to:
a. Engage in any illegal, fraudulent, or malicious activities, including distributing malware, viruses, spyware, or engaging in phishing.
b. Send spam, unsolicited bulk emails, or any form of abusive messaging.
c. Launch Denial-of-Service (DoS) or Distributed Denial-of-Service (DDoS) attacks or cause any disruption to any network or service.
d. Access or attempt to access computer systems without authorization.
e. Infringe upon the intellectual property, privacy, or other rights of any third party.
f. Resell, sublicense, or otherwise distribute the Services without our prior written consent.
g. Reverse engineer, decompile, or attempt to derive the source code of our systems.
3.3. **Internal Blacklist.** To protect our network integrity and comply with legal requirements, we maintain an internal blacklist of sensitive domains (e.g., government, military, and financial institutions). Access to these domains via our Services may be restricted.
### 4. Payments, Billing, and Refunds
4.1. **Pricing.** The fees for our Services are specified on our Site and within your user dashboard. Prices are subject to change, and we will provide reasonable notice of any pricing modifications.
4.2. **Pay-As-You-Go (PAYG).** Our PAYG plan allows you to purchase traffic that is deducted from your main account balance.
a. You must top up your account balance before using PAYG proxies.
b. Unused PAYG traffic or balance does not expire, provided your account remains active. We reserve the right to close inactive accounts and void any remaining balance after 12 months of inactivity.
4.3. **Auto Top-Up.** If you enable the Auto Top-Up feature, you authorize us to automatically charge your designated payment method for a pre-selected amount when your account balance falls below a specified threshold.
4.4. **Payments and Taxes.** All payments are processed through our third-party payment partners (e.g., Stripe). Prices are exclusive of any applicable taxes (such as VAT or sales tax), which are your sole responsibility.
4.5. **Refund Policy.** All purchases are final and non-refundable, except at our sole discretion or where required by law. If you believe you have been charged in error, you must contact us within 30 days of the charge. We may offer a refund for technical failures on our side if reported within 48 hours of the incident.
### 5. Suspension and Termination
5.1. **Suspension.** We may suspend your access to the Services immediately and without prior notice if we determine, in our sole discretion, that:
a. Your use of the Services poses a security risk to our platform or other clients.
b. You are delinquent on your payment obligations or your account balance is zero.
c. You are in breach of this Agreement, particularly the Acceptable Use Policy.
d. Your use of the Services may subject us to legal liability.
5.2. **Termination by You.** You may terminate this Agreement at any time by deleting your account from your profile settings.
5.3. **Termination by Us.** We may terminate this Agreement for cause if you materially breach these terms. We also reserve the right to terminate this Agreement for convenience with reasonable notice.
5.4. **Effect of Termination.** Upon termination, your right to use the Services ceases immediately. You are still obligated to pay any outstanding fees. To ensure data integrity, we perform a "soft delete" of your account and proxies. Your resources will be deactivated, but historical data related to usage and billing will be retained in accordance with our Privacy Policy.
### 6. Confidentiality
6.1. Both parties agree to protect the other's Confidential Information with a reasonable degree of care. "Confidential Information" includes any non-public technical, business, or financial information. Your proxy credentials and API tokens are considered your Confidential Information.
### 7. Disclaimer of Warranties
THE SERVICES ARE PROVIDED "AS IS" AND "AS AVAILABLE". 2EXTRACT EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE DO NOT WARRANT THAT THE SERVICES WILL BE UNINTERRUPTED, ERROR-FREE, OR COMPLETELY SECURE.
### 8. Limitation of Liability
TO THE FULLEST EXTENT PERMITTED BY LAW, IN NO EVENT WILL 2EXTRACT, ITS AFFILIATES, OR ITS SUPPLIERS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR ANY LOSS OF PROFITS OR REVENUES, WHETHER INCURRED DIRECTLY OR INDIRECTLY. OUR TOTAL AGGREGATE LIABILITY IN ANY MATTER ARISING OUT OF OR RELATED TO THIS AGREEMENT IS LIMITED TO THE GREATER OF (A) THE AMOUNT YOU PAID TO US IN THE 1 MONTH PRECEDING THE EVENT GIVING RISE TO THE LIABILITY, OR (B) ONE HUNDRED U.S. DOLLARS (\$100.00).
### 9. Indemnification
You agree to indemnify, defend, and hold harmless 2extract and its affiliates, officers, and employees from any claim, demand, or damage, including reasonable attorneys' fees, arising out of your use of the Services or your breach of this Agreement.
### 10. Miscellaneous
10.1. **Governing Law.** This Agreement shall be governed by the laws of the Republic of Singapore, without regard to its conflict of law principles.
10.2. **Dispute Resolution.** The parties agree to first attempt to resolve any dispute informally. If a dispute is not resolved within 30 days, it shall be settled in the courts of Singapore.
10.3. **Modification of Terms.** We reserve the right to modify this Agreement at any time. We will notify you of material changes by posting the updated version on our Site or via email. Your continued use of the Services after such changes constitutes your acceptance.
10.4. **Entire Agreement.** This Agreement, together with our Privacy Policy and any other referenced documents, constitutes the entire agreement between you and 2extract.
### 11. Contact Information
If you have any questions about these Terms of Service, please contact us at:
* For general and legal inquiries: [support@2extract.com](mailto:support@2extract.com)
# Authentication Methods
Source: https://docs.2extract.com/proxy-products/configuration/authentication
Learn the two ways to authenticate your requests to the 2extract proxy gateway: Username & Password and IP Whitelisting.
To use our proxy network, every request you send to the proxy gateway must be authenticated. This ensures that only authorized users can access the service and that we can correctly attribute traffic usage to your account.
We offer two methods for authentication:
The most common method. You include your proxy's unique credentials in every request.
A more seamless method for servers. You pre-authorize your server's IP address, allowing it to connect without sending credentials.
***
## 1. Username & Password Authentication
This is the standard and most flexible authentication method. Each proxy you create in your dashboard has its own unique username and password.
### How it Works
You need to include these credentials in your proxy connection string in the following format:
`protocol://username:password@host:port`
### Example
Let's say your credentials are:
* **Username:** `2xt-customer-a1b2-proxy-steam`
* **Password:** `a_very_secure_password`
* **Host & Port:** `proxy.2extract.net:5555`
Your connection string for an HTTP client would look like this:
```
http://2xt-customer-a1b2-proxy-steam:a_very_secure_password@proxy.2extract.net:5555
```
```bash cURL theme={null}
# Using the credentials with cURL
curl "https://api.ipify.org" \
--proxy "http://2xt-customer-a1b2-proxy-steam:a_very_secure_password@proxy.2extract.net:5555"
```
```python Python (Requests) theme={null}
# Using the credentials with Python's Requests library
import requests
proxies = {
"http": "http://2xt-customer-a1b2-proxy-steam:a_very_secure_password@proxy.2extract.net:5555",
"https": "http://2xt-customer-a1b2-proxy-steam:a_very_secure_password@proxy.2extract.net:5555",
}
response = requests.get("https://api.ipify.org", proxies=proxies)
print(response.text)
```
Remember, you can dynamically add parameters like `-country-de` to your username to control the proxy's behavior. Learn more in the [Geo-Targeting Parameters](/proxy-products/configuration/geo-targeting) guide.
***
## 2. IP Whitelisting (Authorized IPs) (Coming Soon)
This method is ideal for servers or any machine with a static IP address. By whitelisting your IP, you can send requests without embedding credentials in your code.
### How it Works
1. **Add your IP:** In your proxy's settings page, go to the "Advanced Settings" section and add your server's IP address (e.g., `34.123.45.67`) to the **Authorized IPs** list.
2. **Connect without credentials:** Now, any request coming from that IP address to your proxy's `host:port` will be automatically authenticated.
### Example
Assuming your server's IP `34.123.45.67` has been whitelisted for the proxy at `proxy.2extract.net:5555`.
```bash cURL theme={null}
# No username or password needed!
curl "https://api.ipify.org" \
--proxy "http://proxy.2extract.net:5555"
```
```python Python (Requests) theme={null}
# The proxies dictionary is now much simpler
import requests
proxies = {
"http": "http://proxy.2extract.net:5555",
"https": "http://proxy.2extract.net:5555",
}
response = requests.get("https://api.ipify.org", proxies=proxies)
print(response.text)
```
**Important:** IP Whitelisting only works for **IPv4** addresses. If your server has a dynamic IP, you must use the Username & Password method.
### Which Method Should I Use?
| Scenario | Recommended Method |
| :----------------------------------------------------- | :---------------------- |
| Running scripts from your local machine (dynamic IP) | **Username & Password** |
| Running scripts on a cloud server (static IP) | **IP Whitelisting** |
| Using a tool that doesn't support proxy authentication | **IP Whitelisting** |
| Needing maximum flexibility and control | **Username & Password** |
# Connection Builder (Integration Tab)
Source: https://docs.2extract.com/proxy-products/configuration/endpoint-generator
A beginner-friendly guide to the Integration tab: what it is, why it exists, and how to build a working proxy connection string without memorizing any syntax.
Every proxy you create has a settings page with three tabs: **Overview**, **Settings**, and **Integration**.
This guide is about the **Integration** tab - the place where you turn your proxy into a ready-to-paste connection string or a working code snippet.
If you have never used a proxy before, read this page carefully. You do not need to know what "ASN" or "sticky session" means yet - everything is explained along the way.
***
## Why This Tab Exists
To use a proxy, your program needs four things:
| Part | Example |
| :------- | :----------------------------------- |
| Host | `proxy.2extract.net` |
| Port | `5555` |
| Username | `2xt-customer-a1b2-proxy-my_scraper` |
| Password | `a_very_secure_password` |
Host, port and password never change. The **username is the interesting one**, because with 2extract the username is not just an identifier - it is also the **instruction sheet for the request**.
Everything you want to control - which country the IP comes from, whether the IP stays the same between requests, how long it stays the same - is written into the username as a chain of parameters:
```
2xt-customer-a1b2-proxy-my_scraper-country-de-state-bavaria-session-a1b2c3-time-30
└─────────── your proxy ─────────┘└── where ──┘└──── what kind of session ────┘
```
This design is what makes 2extract flexible: one single proxy can send traffic through Germany, then through Japan, then through a fixed New York IP - all at the same time, from the same program, just by changing the username string.
The trade-off is that the string has rules. Parameters must be in the right order, city names must be lowercase without spaces, ZIP code cannot be combined with a city, and so on. One typo and you either get an error or - worse - traffic silently routed through the wrong place.
**The Integration tab is the tool that writes that string for you.** You click a few dropdowns, and it produces a correct username plus a complete, copy-pasteable code snippet for your language. You never have to memorize the syntax.
***
## The One Thing People Get Wrong
It is worth spelling out how the settings of the proxy itself differ from what you do on the Integration tab.
What you configure on the **Settings** tab (default location, traffic limits) is **saved to your proxy**. It applies to every request you make, forever, until you change it.
What you configure on the **Integration** tab is **not saved anywhere**. It only builds a text string for you to copy. Closing the page throws the selection away.
Think of the Integration tab as a calculator, not a form. A calculator does not "remember" that you typed `2 + 2` - it just hands you the `4`. In the same way, the Integration tab hands you a username and forgets about it.
**Why this is convenient:** you can generate as many different configurations as you want from a single proxy. Ten countries, fifty sessions - all valid at the same time, no extra proxies needed, nothing to save or switch between.
There is no "Save" button on the Integration tab, and that is intentional. If you want to change the **default** behaviour of the proxy itself, use the **Settings** tab instead.
***
## What You See When You Open the Tab
The tab is made of three cards, stacked top to bottom.
Protocol, location, session behaviour, plus one-click presets.
A ready code snippet in cURL, Python, Node.js or Go, updating live as you change anything above.
Produces many connection strings at once, each with its own session (when the session type is Sticky), for tools that expect a proxy list file.
When you first open the tab, the fields are pre-filled with your proxy's **default location** (the one from the Settings tab), protocol `HTTPS`, and session type `Rotating`. No preset is highlighted. This is deliberate - it shows you the configuration you would get if you did nothing at all.
***
## Walkthrough: Your First Connection String
Let's do a real example from start to finish.
**The goal:** check prices on a German online store, from a German IP address, using Python.
Go to **[My Proxies](https://2extract.com/app/proxies)**, click your proxy, then click the **Integration** tab.
Under **Protocol** you will see three options: `HTTP`, `HTTPS`, `SOCKS5`.
If you do not know which one you need, **choose HTTPS**. It encrypts the connection between your computer and our gateway, so nobody on your network can read your proxy password.
* **HTTPS** - the safe default. Works with almost everything.
* **HTTP** - same thing, but the connection to the gateway is not encrypted. Only pick this if a tool specifically demands it.
* **SOCKS5** - a different, lower-level protocol. Needed by some desktop apps, game clients and anti-detect browsers.
Choosing HTTPS here does **not** stop you from visiting `http://` websites. This setting is only about the link between your program and our gateway.
Under **Targeting Mode**, leave the default **Location** selected. (The other option, **ASN**, is for advanced users - see below.)
Below it are four dropdowns: **Country**, **Region / State**, **City**, **ZIP Code**.
For our example, open **Country** and select **Germany**. Leave the rest empty.
The rules the interface enforces for you:
* You cannot pick a Region, City or ZIP until you have picked a Country.
* Picking a **Region or City** disables **ZIP Code**, and vice versa. These two ways of narrowing down a location cannot be combined.
* Every field you leave empty simply means "anywhere" - an empty City means any city in Germany.
Under **Session Control**, the **Session Type** dropdown has two values:
* **Rotating** - you get a **different IP on every request**. Best for collecting many pages, because the target site sees a crowd of visitors rather than one persistent user.
* **Sticky** - you keep **the same IP** for a while. Necessary when your steps depend on each other: log in, add to cart, check out. With a rotating IP, the site would see a different visitor at every step and log you out.
For price checking, keep **Rotating**. The two fields next to it - **Session Time (min)** and the **Force Constant IP** toggle under **Strict Mode** - stay greyed out, because they only make sense for sticky sessions.
Scroll down to the **Verify & Connect** card. It already contains a finished snippet built from your choices.
Use the dropdown in the top-right corner of that card to switch language: **cURL**, **Python**, **Node.js**, **Go**. Pick **Python**, then click the copy button on the code block.
You now have working code:
```python theme={null}
import requests
# Connection string
proxy = "https://2xt-customer-a1b2-proxy-my_scraper-country-de:a_very_secure_password@proxy.2extract.net:5555"
# Configure both protocols to use the proxy
proxies = {
"http": proxy,
"https": proxy
}
response = requests.get("https://api.ipify.org", proxies=proxies)
print(response.text)
```
Notice the `-country-de` that appeared in the username. That is the whole point of the tab: you clicked "Germany" in a dropdown, and it wrote the parameter for you.
Paste the snippet into your project and run it. It requests `https://api.ipify.org`, a free service that simply reports the IP address it sees.
If the printed IP is a German one, everything works. This is the fastest way to confirm your setup before pointing the code at a real target.
***
## Quick Presets
In the top-right corner of the Configuration card there are four buttons: **E-Commerce**, **Web Scraping**, **SMM & Accounts**, **Local SEO**.
Each one fills in every field at once with a combination that suits that kind of work. They exist to show you what a sensible configuration looks like - if you are unsure what to pick, click the closest one and adjust from there.
| | E-Commerce | Web Scraping | SMM & Accounts | Local SEO |
| :---------------- | :--------- | :----------- | :------------- | :-------- |
| Protocol | HTTPS | HTTP | SOCKS5 | HTTPS |
| Targeting Mode | Location | Location | Location | Location |
| Country | US | - | US | US |
| Region | California | - | Florida | - |
| City | - | - | Miami | - |
| ZIP | - | - | - | 11368 |
| Session Type | Rotating | Rotating | Sticky | Sticky |
| Session Time | - | - | 30 min | 15 min |
| Force Constant IP | off | off | on | on |
Clicking a preset **overwrites everything you had selected**, including your country. As soon as you edit any field afterwards, the preset stops being highlighted - because the configuration is no longer that preset.
***
## Sticky Sessions in Detail
Switch **Session Type** to **Sticky** and three things happen.
**1. A session ID is generated.** A short random code such as `a1b2c3` is added to your username as `-session-a1b2c3`. That code *is* the session: every request you send with the same code goes through the same IP. Send a different code and you get a different IP. Your program can generate as many codes as it likes - one per user account, one per browser profile, one per task.
**2. Session Time becomes editable.** This is how long, in minutes, the IP should stay yours. It appears in the username as `-time-30`.
**3. Force Constant IP becomes available.** This is a strict mode toggle, and it deserves an explanation.
Our IPs come from real residential and mobile devices, and a real device can go offline at any moment - someone closes a laptop, someone leaves a Wi-Fi zone. If that happens to your session:
* **Force Constant IP off** (default) - we quietly give you a replacement IP so your program keeps running.
* **Force Constant IP on** - we do *not* substitute. Your request fails with an error instead.
Turn it **on** only when a changing IP would be worse than a failure - for example when managing a sensitive account where a sudden IP change would trigger a security alert. For ordinary data collection, leave it **off**.
***
## Targeting by Network Instead of Location
The second **Targeting Mode** option replaces the location dropdowns with a network selector. Use it when you care about *which provider* the IP belongs to rather than where it is.
* **Residential proxies - ASN.** Enter an Autonomous System Number, the ID of an internet provider's network (for example `7922` for Comcast). You get an IP inside that provider's network.
* **Mobile proxies - ISP.** Choose a mobile operator such as T-Mobile or Vodafone from the list. You get an IP on that carrier's mobile network.
Network targeting and location targeting **cannot be combined**. Choosing ASN or ISP removes the country, region, city and ZIP parameters from the username entirely. This is why switching Targeting Mode hides the location fields instead of merely disabling them.
If you have no specific reason to target a provider, stay on **Location**.
***
## Generating a List of Proxies
Some tools - anti-detect browsers, multi-account managers, scraping frameworks - do not want a single proxy. They want a file with dozens of lines, one proxy per line.
The **Generate List** card at the bottom of the tab does that:
1. Set **Quantity** - how many lines you need.
2. Set **Format** - the layout the receiving tool expects: `host:port:user:pass`, `user:pass@host:port`, or `host,port,user,pass`.
3. Click **Generate**.
4. Take the contents of the **Output** field: **Copy All**, or download it as **.txt** or **.csv**.
Every line uses the configuration you built above, but with **its own unique session ID**. So a list of 50 gives you 50 independent sticky sessions - which is exactly what you want when running 50 browser profiles that must not share an IP.
***
## Common Questions
No. There is nothing to save. The tab only produces text. What matters is the string you copied - once it is in your code, the tab has done its job.
No. Rebuild it in a few clicks, or better, keep the copied connection string in your project. If you want a configuration to be permanent, set it as the proxy's default on the **Settings** tab.
Yes, and this is the main advantage of the design. One proxy, many usernames. Nothing is locked, nothing conflicts, and you are not charged extra for it - billing is based on the traffic you use, not on how many configurations you generate.
Because you have selected a Region or a City. ZIP and Region/City are two competing ways of narrowing down a location and cannot be used together. Clear the Region and City fields and ZIP becomes available again.
Because it contains your own client ID and proxy name. The parameter part after them follows exactly the same rules described in [Geo-Targeting Parameters](/proxy-products/configuration/geo-targeting) and [Session Control Parameters](/proxy-products/configuration/session).
Yes. The tab is a convenience, not a requirement - anything it generates you can type yourself, and anything you type correctly will work. The parameter reference is in [Geo-Targeting Parameters](/proxy-products/configuration/geo-targeting). Most people use the builder because it removes the typo risk.
First run the snippet unchanged against `https://api.ipify.org` - that isolates whether the problem is the proxy or your target site. If it still fails, check the [Error Codes](/proxy-products/configuration/errors) page, and make sure your account balance is positive.
***
## Where to Go Next
The full reference for every location parameter the builder can produce.
How rotating and sticky sessions behave under the hood.
HTTP, HTTPS and SOCKS5 compared in detail.
Username/password and IP whitelist authentication explained.
# Error Handling & Response Codes
Source: https://docs.2extract.com/proxy-products/configuration/errors
Understand the different HTTP response codes our proxy gateway can return and learn how to debug common issues.
When you make a request through the 2extract.com proxy gateway, there are two potential sources of errors:
1. **Our Gateway:** Errors related to your account, authentication, or proxy configuration.
2. **The Target Website:** Errors returned by the website you are trying to scrape.
To help you instantly distinguish between these, our gateway adds a special HTTP header to any error it generates:
`X-2extract-Error: [A human-readable error description]`
**Rule of thumb: If you see the `X-2extract-Error` header, the problem is related to your proxy setup. If you don't, the problem is on the target website's side.**
***
## Gateway Errors (4xx & 5xx Codes)
These are errors generated by our system. Always check the `X-2extract-Error` header for specific details.
### 400 Bad Request
This means there is a mistake in how you configured your request.
| `X-2extract-Error` Message | Meaning & How to Fix |
| :-------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- |
| `Invalid username parameter: [param]` | You've used a parameter that doesn't exist. Check the spelling in our documentation. |
| `Conflicting targeting parameters...` | You've combined mutually exclusive parameters, like `-country-us` and `-asn-123`. Choose one targeting method. |
| `Invalid value for parameter: [param]` | The value you provided is incorrect (e.g., `-country-usa` instead of `-country-us`). Check the format. |
| `Missing required parameter...` | You've used a parameter that depends on another one (e.g., `-state-ca` without `-country-us`). Add the required dependency. |
| `Ambiguous city name: [city]...` | The city you're targeting exists in multiple states. Add a `-state-[code]` parameter to clarify. |
| `Invalid format for header: X-2extract-Geolocation` | The syntax of your geolocation header is incorrect. Check the `lat=...,lon=...,rad=...` format. |
### 407 Proxy Authentication Required
This is the most common error and is always related to your access credentials or account status.
| `X-2extract-Error` Message | Meaning & How to Fix |
| :----------------------------------- | :------------------------------------------------------------------------------------------------------------------------ |
| `User authentication failed` | Your proxy username or password is incorrect. Double-check your credentials. |
| `IP address not whitelisted...` | Your server's IP is not in the "Authorized IPs" list for this proxy. Add it in your proxy settings. |
| `Zero balance. Service suspended.` | Your account balance has run out. [**Top up your balance**](https://2extract.com/app/billing) to reactivate your proxies. |
| `Traffic limit reached for proxy...` | This specific proxy has hit the usage limit you configured. Increase the limit in the proxy's settings. |
### 502 Bad Gateway
This indicates a temporary problem with the specific residential IP that was assigned to your request.
| `X-2extract-Error` Message | Meaning & How to Fix |
| :------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `No available proxies for the requested target...` | We currently don't have any available IPs that match your specific targeting criteria (e.g., a very small city). Try broadening your target. |
| `Session IP is offline` | The IP for your sticky session has gone offline. **Simply retry your request with the same session ID** to get a new IP (unless you are using `-const`). |
| `Proxy connection failed` | The selected IP couldn't connect to the target. This is a temporary network issue. **Retry your request.** |
### 504 Gateway Timeout
This means the connection took too long.
| `X-2extract-Error` Message | Meaning & How to Fix |
| :-------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Target connection timeout` | Our proxy could not establish a connection with the target website in a reasonable time. The target might be down or blocking requests. Check the target and retry. |
| `Proxy tunnel timeout` | There was a network issue between our gateway and the exit IP. **Retry your request** to get a different IP. |
***
## Target Website Errors
If you receive an error code **without** an `X-2extract-Error` header, it means our proxy successfully connected to the target, but the target itself rejected your request.
Here are the most common ones you'll encounter while scraping:
| HTTP Status | Name | Why it Happens & How to Fix |
| :---------------------------- | :------------------ | :---------------------------------------------------------------------------------------------------------------------------------- |
| **403 Forbidden** | Forbidden | The target website has identified your request as non-human and blocked your IP address. **Action: Rotate your IP immediately.** |
| **429 Too Many Requests** | Rate Limited | You are sending requests too quickly. **Action: Slow down your scraper** (increase delays) and rotate your IP. |
| **500 Internal Server Error** | Server Error | The target website's server has an internal problem. **Action: Retry the request after a short delay.** |
| **503 Service Unavailable** | Service Unavailable | The target website is overloaded or down for maintenance. **Action: Retry the request after a longer delay (e.g., 15-30 minutes).** |
# Geo-Targeting Parameters
Source: https://docs.2extract.com/proxy-products/configuration/geo-targeting
Learn how to target specific countries, states, cities, ZIP codes, and ASNs by adding parameters to your proxy username.
Geo-targeting allows you to control the geographic location of the exit IP address for your requests. This is essential for accessing geo-restricted content, collecting localized data, and ad verification.
You can control geo-targeting by appending special parameters directly to your proxy's **username**.
**Base Username:** `2xt-customer-a1b2-proxy-my_scraper`
**Username with Geo-Targeting:** `2xt-customer-a1b2-proxy-my_scraper-country-de-city-berlin`
***
## Targeting Logic
Our gateway processes geo-parameters with the following rules:
* **Specificity Wins:** The most specific parameter is always used. For example, if you provide both `-city` and `-country`, the city will be prioritized.
* **Dependencies:** Some parameters require others. For example, you cannot target a city without specifying a country.
* **Mutual Exclusivity:** You can either target by **geography** (`country`, `state`, `city`, `zip`) OR by **network** (`asn`, `isp`). You cannot use both in the same request.
***
## Geographic Targeting Parameters
These parameters control the physical location of the proxy.
### Country (`-country`)
This is the most common targeting parameter. It allows you to select an IP from a specific country.
* **Format:** `-country-[code]`
* **Value:** A 2-letter ISO 3166-1 alpha-2 country code (e.g., `us`, `de`, `gb`).
* **Dependencies:** None.
* **Example Username:** `...-my_scraper-country-de`
* **Result:** Your request will be routed through a random IP in Germany.
* **[View full list of supported countries](/data/countries)**
### State / Region (`-state`)
Target a specific state or region within the selected country.
* **Format:** `-state-[code]`
* **Value:** A state or region name (e.g., `california` for California, `newyork` for New York).
* **Dependencies:** Requires `-country` to be present in the username.
* **Example Username:** `...-my_scraper-country-us-state-california`
* **Result:** Your request will be routed through an IP in California.
* **[View the full list of regions/states](/data/states)**
### City (`-city`)
Target a specific city.
* **Format:** `-city-[name]`
* **Value:** The name of the city in lowercase, with spaces removed (e.g., `newyork`, `sanfrancisco`).
* **Dependencies:** Requires a `-country` parameter. Can be combined with `-state` for disambiguation.
* **Example (Simple):** `...-my_scraper-country-fr-city-paris`
* **Example (With State):** `...-my_scraper-country-us-state-il-city-springfield`
* **Result:** Your request will be routed through an IP in the specified city.
* **Note on Ambiguity:** If a country has multiple cities with the same name, you **must** provide a `-state` to clarify. Otherwise, the gateway will return an error.
* **[View the full list of cities](/data/cities)**
### ZIP Code (`-zip`)
Target a specific ZIP code. Ideal for hyper-local data collection.
* **Format:** `-zip-[code]`
* **Value:** A ZIP code.
* **Dependencies:** Requires `-country`. Can be combined with `-state` and `-city` for more precise targeting.
* **Example Username:** `...-my_scraper-country-us-zip-90210`
* **Result:** Your request will be routed through an IP in the Beverly Hills area.
* **[View the full list of ZIP codes](/data/zips)**
***
## Network Targeting Parameters
These parameters control the network origin of the proxy. They are mutually exclusive with all geographic parameters.
### ASN (`-asn`)
Target a specific Internet Service Provider (ISP) by its Autonomous System Number (ASN).
* **Format:** `-asn-[number]`
* **Value:** The numerical ASN of the provider (e.g., `7922` for Comcast).
* **Dependencies:** Mutually exclusive with all geographic parameters (`-country`, `-state`, `-city`, `-zip`).
* **Example Username:** `...-my_scraper-asn-7922`
* **Result:** Your request will be routed through an IP belonging to the Comcast network.
* **Tip:** You can find ASN numbers for major providers on sites like [ipinfo.io](https://ipinfo.io/AS24940?lookup_source=search-bar).
### ISP (`-isp`) - Mobile Proxies Only
Target a specific mobile network operator by its numeric ISP code. Available for mobile proxies only.
* **Format:** `-isp-[code]`
* **Value:** The numeric code of the mobile operator as provided in the ISP reference list (e.g., `310260` for T-Mobile US).
* **Dependencies:** Mutually exclusive with all geographic parameters (`-country`, `-state`, `-city`, `-zip`). Available on mobile proxies only.
* **Example Username:** `...-my_scraper-isp-310260`
* **Result:** Your request will be routed through an IP on the T-Mobile US network.
* **Note:** The ISP code is a numeric identifier, not a name slug. Use the code from the ISP selector in your proxy dashboard.
* **[View the full list of ISPs](/data/isp)**
# Understanding Protocols (HTTP vs. SOCKS5)
Source: https://docs.2extract.com/proxy-products/configuration/protocols
Learn the difference between HTTP(S) and SOCKS5 protocols and choose the right one for your use case.
When you create a proxy in your 2extract.com dashboard, you can choose the protocol it will use: **HTTP(S)** or **SOCKS5**. While both allow you to route your traffic through our network, they work at different levels and are suited for different tasks.
## Quick Comparison
| Feature | HTTP(S) Proxy | SOCKS5 Proxy |
| :--------------------- | :--------------------------------------------- | :--------------------------------------------------------------- |
| **Traffic Type** | Only HTTP & HTTPS (web traffic) | TCP traffic (no UDP support) |
| **Anonymity** | Good (can see/modify headers) | **Excellent** (works at a lower level) |
| **Speed** | Generally faster | Slightly slower due to overhead |
| **Common Use Case** | Web Scraping, Browser Automation | Email clients, FTP, Non-HTTP apps |
| **Our Recommendation** | **Use HTTP(S) for 99% of web scraping tasks.** | Use SOCKS5 only if you have a specific need for non-web traffic. |
***
## HTTP(S) Proxies
The HTTP(S) protocol is the foundation of the web. An HTTP proxy is specifically designed to understand and handle web traffic (the requests your browser or scraper sends to websites).
### Key Characteristics:
* **Application-Level:** It operates at Layer 7 of the OSI model. This means it "understands" the content of your web requests and can interact with them (e.g., add or modify headers).
* **Optimized for Web:** Because it's specialized for web traffic, it's often faster and more efficient for tasks like web scraping.
* **Easy to Use:** Supported by virtually every web scraping library (`requests`, `Puppeteer`, `Scrapy`) and tool out of the box.
**For web scraping and browser automation, HTTP(S) is almost always the right choice.** It's simpler, faster, and fully supported by our entire feature set, including the Proxy Gateway parameters.
### When to use HTTP(S):
* Scraping websites
* Automating tasks in a browser
* Verifying ads on web pages
* Accessing web-based APIs
***
## SOCKS5 Proxies
SOCKS5 is a more versatile and lower-level protocol. Unlike an HTTP proxy, it doesn't understand the traffic passing through it; it simply creates a "tunnel" and passes along any TCP/IP traffic.
### Key Characteristics:
* **Transport-Level:** It operates at Layer 5 of the OSI model. It doesn't inspect or modify your traffic, making it more anonymous.
* **TCP-Versatile:** It can handle TCP-based internet traffic beyond just web pages, including email (SMTP), file transfers (FTP), and other non-HTTP protocols.
* **DNS Resolution:** SOCKS5 can handle DNS requests on the proxy server's side, which can prevent DNS leaks and enhance privacy.
UDP traffic is not supported over SOCKS5. Protocols that rely on UDP — such as HTTP/3 (QUIC), DNS-over-UDP, and WebRTC media — will not work through our SOCKS5 proxies. Only TCP-based connections are supported.
### When to use SOCKS5:
* When your application is **not** using the HTTP protocol (e.g., an email client, FTP, or other TCP-based tools).
* For tasks requiring the highest level of anonymity where you don't want the proxy to interact with your traffic at all.
* For applications requiring higher anonymity where you don't want the proxy inspecting your traffic.
## How to Choose in Your Dashboard
You can select your preferred protocol when creating or editing a proxy in the "Connection Helper" section of your **[Proxy Settings](https://2extract.com/app/proxy)** page.
# Session Control Parameters
Source: https://docs.2extract.com/proxy-products/configuration/session
Learn how to manage IP rotation and create sticky sessions with custom durations using session control parameters.
Session control allows you to manage the lifecycle of your proxy's IP address. By default, every request you make gets a new, random IP address from our pool (per-request rotation). However, for many tasks, you need to maintain the same IP across multiple requests. This is called a "sticky session".
You control this behavior by adding session parameters to your proxy's **username**.
***
## Session Types
**Behavior:** You get a new IP address on every single request.
**Use Case:** Ideal for large-scale scraping tasks where you need maximum diversity of IPs to avoid rate limits and blocks.
**How to use:** Send requests with your base username, without any session parameters.
**Behavior:** You get a single IP address and can reuse it for a specific period.
**Use Case:** Essential for any multi-step workflow on a website, such as logging in, adding items to a cart, or navigating through paginated results.
**How to use:** Add the `-session` parameter to your username.
***
## Session Control Parameters
These parameters work together to give you full control over your sticky sessions.
### Session ID (`-session`)
This is the primary parameter for enabling a sticky session.
* **Format:** `-session-[id]`
* **Value:** Any alphanumeric string you choose. This string is your unique identifier for a session.
* **Dependencies:** None.
* **How it works:** All requests sent with the same session ID will be routed through the same exit IP for the duration of the session. To get a new IP, simply change the session ID.
* **Example Usernames:**
* `...-my_scraper-session-user123` (gets IP **A**)
* `...-my_scraper-session-user123` (still gets IP **A**)
* `...-my_scraper-session-user456` (gets a new IP, IP **B**)
### Session Time (`-time`)
By default, a sticky session lasts for **10 minutes**. The `-time` parameter allows you to change this duration.
* **Format:** `-time-[minutes]`
* **Value:** A whole number.
* **Dependencies:** **Must** be used together with a `-session` parameter.
* **Example Username:** `...-my_scraper-session-user123-time-30`
* **Result:** The sticky session for `user123` will now last for **30 minutes** instead of the default 10.
* **Error Case:** Using `-time-30` without `-session` will result in an error.
**Important Note on Session Reliability:**
The session duration is a request, not a 100% guarantee. Due to the dynamic nature of residential networks, a peer device can go offline at any time. If the IP for your session becomes unavailable, our system will automatically assign you a **new IP** on your next request with the same session ID.
### Strict Session (`-const`)
This parameter changes the behavior of the gateway when a session IP goes offline.
* **Format:** `-const` (this is a flag, it has no value).
* **Dependencies:** **Must** be used together with a `-session` parameter.
* **Default Behavior (without `-const`):** If your session IP goes offline, we automatically assign a new IP to your session. This ensures your scraper continues working.
* **Behavior with `-const`:** If your session IP goes offline, we **do not** assign a replacement. Instead, your request will fail with a `502 Bad Gateway` error and an `X-2extract-Error: Session IP is offline` header.
* **Use Case:** Use this only when your workflow is critically dependent on using the **exact same IP** from start to finish, and you would rather have the process fail than continue with a new IP.
* **Example Username:** `...-my_scraper-session-user123-time-60-const`
***
### Which Session Type Should I Use?
Choose the best session type for your specific task. All parameters can be combined with any valid geo-targeting.
| If your goal is... | Recommended Parameter(s) | Example Username | Why it works |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Maximum Anonymity & Scraping Simple Pages**
(e.g., collecting product prices from multiple pages) | (None - use default behavior) | `...-proxy-myproject-country-de` | By default, you get a **new IP for every single request**. This makes it extremely difficult for the target website to track you as a single user. |
| **Multi-Step Actions & Logins**
(e.g., logging into an account, filling a form, navigating a cart) | `-session-[your_id]` | `...-proxy-myproject-session-user123` | Using a `session` ID guarantees that you will **keep the same IP address** for a sequence of requests, making you look like a regular user navigating the site. |
| **Long-Term Data Collection from a Single IP**
(e.g., monitoring a specific social media profile for an hour) | `-session-[your_id] -time-[minutes]` | `...-proxy-myproject-session-task456-time-60` | Adding the `-time` parameter extends the default 10-minute session lifetime. |
| **High-Security Tasks Where IP Change is Unacceptable**
(e.g., managing a sensitive online account where a sudden IP change could trigger a security alert) | `-session-[your_id] -const` | `...-proxy-myproject-session-secure-const` | The `-const` flag ensures that if your assigned session IP goes offline, your request will **fail with an error** instead of automatically getting a new IP. This prevents accidental IP exposure. |
# Mobile Proxies: Introduction & Use Cases
Source: https://docs.2extract.com/proxy-products/mobile/introduction-use-cases
Discover the power of Mobile Proxies and when to use them for your data collection needs.
## What Are Mobile Proxies?
**Mobile Proxies** from 2extract.com are IP addresses assigned to real mobile devices (phones and tablets) connected to 3G, 4G, and 5G cellular networks. When you use a mobile proxy, your request appears to come from a genuine mobile user on a carrier network like AT\&T, T-Mobile, or Vodafone.
This makes mobile proxies the most powerful and resilient type of proxy available, as they are almost impossible for target websites to distinguish from real mobile user traffic.
**Key takeaway:** Mobile proxies make you look like a real person browsing on their phone.
## Common Use Cases
Mobile proxies are essential for the most challenging targets and mobile-first platforms.
Manage multiple social media accounts, scrape user-generated content, and analyze trends on platforms like Instagram, TikTok, and Facebook without triggering security alerts.
Test your mobile applications and verify that mobile ads are being displayed correctly to users on specific carrier networks and operating systems (iOS/Android).
Bypass the most advanced anti-bot systems on eCommerce and travel websites that are particularly sensitive to scraper traffic.
See your website or application exactly as a mobile user in a specific country and on a specific carrier network would see it.
# Mobile Proxies: Quick Start
Source: https://docs.2extract.com/proxy-products/mobile/quick-start
A step-by-step example to get you started with our Mobile Proxies in minutes.
This guide assumes you have already [created your first Mobile Proxy](/getting-started/quick-start). The process is very similar to using Residential proxies, but with additional targeting capabilities.
### Your Connection Credentials
Navigate to your proxy's settings page in the [**My Proxies**](https://2extract.com/app/proxies) dashboard to get your Host, Port, Username, and Password.
### Example: Getting an IP from a Specific ISP
Let's make a request through T-Mobile US. ISP targeting uses a numeric operator code and is mutually exclusive with geographic parameters — you cannot combine `-isp` with `-country`, `-state`, or `-city`.
```bash cURL theme={null}
# Replace with your actual credentials
# -isp-310260 = T-Mobile US
USERNAME="PROXY_USERNAME-isp-310260"
PASSWORD="PROXY_PASSWORD"
HOST="proxy.2extract.net:5555"
curl "https://api.ipify.org?format=json" \
--proxy "http://${USERNAME}:${PASSWORD}@${HOST}"
```
```python Python theme={null}
import requests
# Replace with your actual credentials
# -isp-310260 = T-Mobile US
proxy_details = {
"username": "PROXY_USERNAME-isp-310260",
"password": "PROXY_PASSWORD",
"host": "proxy.2extract.net",
"port": 5555,
}
proxies = {
"http": f"http://{proxy_details['username']}:{proxy_details['password']}@{proxy_details['host']}:{proxy_details['port']}",
"https": f"http://{proxy_details['username']}:{proxy_details['password']}@{proxy_details['host']}:{proxy_details['port']}",
}
response = requests.get('https://api.ipify.org?format=json', proxies=proxies)
print(response.json())
```
The response will be a JSON object containing an IP address from the T-Mobile US network.
You've now mastered the basics of mobile targeting! For a full list of parameters, check out our **[Geo-Targeting guide](/proxy-products/configuration/geo-targeting)**.
# Mobile Proxies: Specifics & Limitations
Source: https://docs.2extract.com/proxy-products/mobile/specifics-limitations
Key characteristics and best practices for using our powerful Mobile Proxy network.
Mobile proxies are our premium offering. Understanding their unique nature is key to maximizing their effectiveness.
### IP Pool Characteristics
* **Source:** Our Mobile pool consists of IP addresses from real mobile devices on 3G/4G/5G networks. These are the highest-quality, most trusted IPs available.
* **IP Rotation:** Mobile IPs are naturally more dynamic than residential ones. An IP can change as a device moves between cell towers. Our system leverages this natural rotation.
### Unique Targeting Capabilities
The primary advantage of Mobile proxies is the ability to target by:
* **ISP (`-isp-{code}`):** Target specific mobile network operators by their numeric ISP code (e.g. `-isp-310260` for T-Mobile US). ISP targeting is mutually exclusive with geo parameters - selecting ISP mode disables country, state, city, and ZIP targeting.
### Session Stability
* **Sticky Sessions:** While sticky sessions are fully supported, their stability is **inherently lower** than with Residential proxies due to the nature of cellular networks. A session may be interrupted if the device loses signal or switches networks.
* **Best Practice:** For mobile proxies, it is **critically important** to build robust retry logic into your application to handle potential session interruptions gracefully.
### Recommended Use Cases
* **The Most Challenging Targets:** Social media platforms, flight aggregators, and limited-edition product sites.
* **Mobile-First Platforms:** Scraping data from mobile apps or verifying content on mobile versions of websites.
* **Any task requiring the highest level of trust and anonymity.**
# Residential Proxies: Introduction & Use Cases
Source: https://docs.2extract.com/proxy-products/residential/introduction-use-cases
Understand what Residential Proxies are and how they can solve your most common data collection challenges.
## What Are Residential Proxies?
**Residential Proxies** from 2extract.com are IP addresses provided by real desktop and laptop devices connected to genuine home Wi-Fi networks. When you use a residential proxy, your requests to any website appear as if they are coming from a regular, local user.
This makes them the ideal tool for a wide range of data collection tasks, as they are far less likely to be blocked or served misleading information compared to datacenter proxies.
**Key takeaway:** Residential proxies make you look like a real person, not a bot.
## Common Use Cases
Residential proxies are the perfect solution when you need high anonymity and a low block rate. Here are some of the most popular applications:
Scrape product details, pricing, and stock levels from any eCommerce site without getting blocked. Aggregate competitor data to optimize your own pricing strategy.
Verify that your ads are being displayed correctly in different geographical locations and to the right audience. Check for unauthorized ad placements and protect your brand.
Track your keyword rankings from any search engine in any country. Analyze Search Engine Results Pages (SERPs) as a local user would see them.
Collect public data to analyze market trends, review sentiment, and gather business intelligence at scale.
# Residential Proxies: Quick Start
Source: https://docs.2extract.com/proxy-products/residential/quick-start
A step-by-step example to get you started with our Residential Proxies in minutes.
This guide assumes you have already [created your first Residential Proxy](/getting-started/quick-start). Here, we'll focus on how to use it with a simple example.
### Your Connection Credentials
First, navigate to your proxy's settings page in the [**My Proxies**](https://2extract.com/app/proxies) dashboard. You will need the following from the "Connection Details" block:
* **Host:** `proxy.2extract.net`
* **Port:** (e.g., `5555`)
* **Username:** (e.g., `2xt-customer-...-proxy-my_scraper`)
* **Password:** (Click "Show" to reveal)
### Example: Getting an IP from Germany
Let's make a request to get an IP address from Germany. We will do this by adding the `-country-de` parameter to your username.
```bash cURL theme={null}
# Replace with your actual credentials
USERNAME="PROXY_USERNAME-country-de"
PASSWORD="PROXY_PASSWORD"
HOST="proxy.2extract.net:5555"
curl "https://api.ipify.org?format=json" \
--proxy "http://${USERNAME}:${PASSWORD}@${HOST}"
```
```python Python theme={null}
import requests
# Replace with your actual credentials
proxy_details = {
"username": "PROXY_USERNAME-country-de",
"password": "PROXY_PASSWORD",
"host": "proxy.2extract.net",
"port": 5555,
}
proxies = {
"http": f"http://{proxy_details['username']}:{proxy_details['password']}@{proxy_details['host']}:{proxy_details['port']}",
"https": f"http://{proxy_details['username']}:{proxy_details['password']}@{proxy_details['host']}:{proxy_details['port']}",
}
response = requests.get('https://api.ipify.org?format=json', proxies=proxies)
print(response.json())
```
If successful, the response will be a JSON object containing an IP address located in Germany.
That's it! You can now use this logic to target any country or configure sessions. For a full list of possibilities, check out our **[Configuration Guide](/proxy-products/configuration/authentication)**.
# Residential Proxies: Specifics & Limitations
Source: https://docs.2extract.com/proxy-products/residential/specifics-limitations
Understand the unique characteristics and best practices for using Residential Proxies.
While Residential Proxies are incredibly powerful, it's important to understand their specific characteristics to get the best results.
### IP Pool Characteristics
* **Source:** Our Residential pool consists of millions of real IP addresses from desktop and laptop devices connected to genuine Internet Service Providers (ISPs) like Comcast, Verizon, and Deutsche Telekom.
* **Rotation:** The pool is dynamic. IPs can go online and offline as users connect and disconnect their devices. Our system automatically filters out offline IPs to ensure a high success rate.
### Session Stability
* **Sticky Sessions:** Residential proxies offer **high session stability**. A sticky session created with the `-session` parameter will typically remain stable for its entire duration (default 10 minutes, or up to 24 hours with `-time`).
* **Best Practice:** For critical, multi-step tasks, always build retry logic into your scraper. While rare, an IP can go offline unexpectedly.
### Recommended Use Cases
* **High-Anonymity Tasks:** Perfect for any target that employs sophisticated anti-bot measures.
* **Geo-Targeted Content:** Ideal for scraping content that changes based on the user's country, state, or city.
* **NOT Recommended for:**
* Tasks requiring extremely low latency (e.g., high-frequency trading). For this, Datacenter proxies are a better fit.
* Sending emails or activities that could be flagged as spam. This is a violation of our Terms of Service.
# API Keys
Source: https://docs.2extract.com/public-api/api-keys
Create, scope, and revoke API keys from the dashboard to control programmatic access to your account.
API keys let you authenticate requests to the 2extract Public API without using your account password. You can create multiple keys with different permissions - for example, a read-only key for a monitoring script and a write key for a provisioning pipeline.
All key management happens on the **API Keys** page in the sidebar of your dashboard:
**[Dashboard](https://2extract.com/app) → API Keys**
***
## Creating a key
Click **Create API Key** to open the creation dialog. Fill in three fields:
**Name** - a descriptive label so you can identify the key later (e.g. `Automation script`, `CI pipeline`).
**Permissions** - select the access scopes the key needs. Permissions are grouped by area:
| Permission | What it allows |
| :-------------- | :--------------------------------------------------------------- |
| `proxies:read` | List and retrieve proxy details and configuration |
| `proxies:write` | Create, update, and delete proxies; manage limits and whitelists |
| `geo:read` | Access geo directory (countries, states, cities, ZIP codes) |
| Permission | What it allows |
| :----------- | :----------------------------------------------- |
| `stats:read` | View traffic statistics and export usage reports |
| Permission | What it allows |
| :------------- | :------------------------------------------------------------- |
| `balance:read` | View account balance, transaction history, and available plans |
`proxies:write` does **not** include `proxies:read` - assign both if your integration needs to both create and read proxies.
**Expiration** - choose how long the key stays valid:
| Option | Duration |
| :------------ | :------------------------ |
| 30 days | Key expires in 30 days |
| 90 days | Key expires in 90 days |
| 6 months | Key expires in 6 months |
| 1 year | Key expires in 1 year |
| No expiration | Key is valid indefinitely |
Click **Create API Key** to generate the key.
***
## Saving the key
After creation, the **Your New API Key** dialog appears with the full key value and a **Copy** button.
This API key will not be shown again. Copy it and store it in a safe place, such as a password manager or a secrets vault. If you lose it, revoke the key and create a new one.
Click **Done** to close the dialog. From this point, only the key prefix (e.g. `2xt_20fe...`) is visible in the table.
***
## Viewing and managing keys
The API Keys page lists all active keys in a table with the following columns:
| Column | Description |
| :-------------- | :------------------------------------------------- |
| **Name** | The label you set at creation |
| **Key** | Truncated key prefix (e.g. `2xt_20fe...`) |
| **Permissions** | Scopes granted to this key |
| **Last used** | When the key last authenticated a request |
| **Expires** | Expiration date, or empty if no expiration was set |
| **Created** | When the key was generated |
Use the search field to filter keys by name. Columns can be sorted by clicking the column header.
You can have up to **10 API keys** per account. To create a new one when at the limit, revoke an existing key first.
***
## Revoking a key
Click **Revoke** next to any key to open the confirmation dialog. Confirm by clicking **Revoke** in the **Revoke API Key** dialog.
Revocation is immediate - any requests using the key will start returning `401 Unauthorized` instantly. This action is irreversible.
Revoke a key immediately if:
* It was accidentally committed to a repository
* A team member who had access has left
* You suspect it was leaked or compromised
***
## Security best practices
Each script or service should have its own key. This way you can revoke a single key without affecting other integrations.
A monitoring script only needs `stats:read`. A provisioning pipeline needs `proxies:write`. Never grant more than required.
Never hardcode keys in source code. Store them in environment variables or a secrets manager (Vault, AWS Secrets Manager, etc.).
Prefer keys with an expiration date over indefinite ones. Rotate before expiry by creating a replacement key, updating your integration, then revoking the old one.
# Balance & Plans
Source: https://docs.2extract.com/public-api/balance
Check your account balance, view transaction history, and retrieve available tariff plans. Required scope: balance:read.
See the [Swagger UI](https://api.2extract.com/swagger/index.html) for live request/response schemas and to try endpoints directly in your browser.
***
## Get balance
Returns the current spendable balance of the authenticated user's account in USD.
```http theme={null}
GET /v1/user/balance
```
**Scope:** `balance:read`
```bash cURL theme={null}
curl https://api.2extract.com/v1/user/balance \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/user/balance",
headers={"X-API-Key": "2xt_YOUR_API_KEY"}
)
print(r.json())
```
**Example response**
```json theme={null}
{
"result": true,
"data": {
"funds_available": 42.50
}
}
```
***
## Get balance history
Returns a paginated list of balance transactions (top-ups and charges) for a given date range.
```http theme={null}
GET /v1/user/balance-history
```
**Query parameters**
| Parameter | Type | Required | Description |
| :---------- | :------ | :------- | :----------------------------------------------- |
| `date_from` | string | Yes | Start date in `YYYY-MM-DD` format |
| `date_to` | string | Yes | End date in `YYYY-MM-DD` format |
| `limit` | integer | No | Items per page. Default: `100` |
| `page` | integer | No | Page number starting from `0`. Default: `0` |
| `order` | string | No | Sort direction: `asc` or `desc`. Default: `desc` |
**Scope:** `balance:read`
```bash cURL theme={null}
curl "https://api.2extract.com/v1/user/balance-history?date_from=2026-01-01&date_to=2026-12-31" \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/user/balance-history",
headers={"X-API-Key": "2xt_YOUR_API_KEY"},
params={"date_from": "2026-01-01", "date_to": "2026-12-31", "limit": 50}
)
print(r.json())
```
**Example response**
```json theme={null}
{
"result": true,
"data": [
{
"id": 1234567,
"tx_id": 1234567,
"type": "Top-up",
"source": "payment",
"amount": 100.00,
"currency": "USD",
"description": "Manual Top-up via Visa ****4242",
"created_at": "2026-01-15T10:30:00Z"
}
]
}
```
***
## Get plans
Returns the list of available tariff plans. Use the `id` from this response as `tariff_id` when creating a proxy.
```http theme={null}
GET /v1/plans
```
**Query parameters**
| Parameter | Type | Required | Description |
| :----------- | :------ | :------- | :---------------------------- |
| `proxy_type` | string | Yes | `residential` or `mobile` |
| `enabled` | boolean | No | Filter to only active plans |
| `popular` | boolean | No | Filter to only featured plans |
**Scope:** `proxies:read` or `proxies:write`
```bash cURL theme={null}
curl "https://api.2extract.com/v1/plans?proxy_type=residential" \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/plans",
headers={"X-API-Key": "2xt_YOUR_API_KEY"},
params={"proxy_type": "residential"}
)
print(r.json())
```
**Example response**
```json theme={null}
{
"result": true,
"data": [
{
"id": 1,
"title": "Residential 1GB",
"description": "Pay-as-you-go residential proxy traffic",
"amount": 4.50,
"currency": "USD",
"traffic_available": 1000000000,
"traffic_type": "package"
}
]
}
```
# Geo Reference
Source: https://docs.2extract.com/public-api/geo
Look up countries, states, cities, and ZIP codes to use as targeting parameters when creating proxies. Required scope: geo:read.
See the [Swagger UI](https://api.2extract.com/swagger/index.html) for live request/response schemas and to try endpoints directly in your browser.
The geo endpoints return the IDs and codes you need to set geo-targeting on your proxies. The typical lookup flow is:
1. **Countries** - get a country `id` (integer) and `code` (string)
2. **States** - use `code` to get states for that country
3. **Cities** - filter by country and optionally state
4. **ZIP codes** - filter by country and city
Pass country `id` values in the `countries` array when creating or updating a proxy. Use `code` and `extract_parameter` values in proxy username parameters for connection-level geo-targeting.
***
## Get countries
Returns all available countries with their numeric IDs and ISO codes.
```http theme={null}
GET /v1/geo/countries
```
**Query parameters**
| Parameter | Type | Required | Description |
| :-------- | :----- | :------- | :------------------------------------- |
| `search` | string | No | Filter by country name (partial match) |
**Scope:** `geo:read`
```bash cURL theme={null}
curl https://api.2extract.com/v1/geo/countries \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```bash cURL (with search) theme={null}
curl "https://api.2extract.com/v1/geo/countries?search=United" \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/geo/countries",
headers={"X-API-Key": "2xt_YOUR_API_KEY"}
)
print(r.json())
```
**Example response**
```json theme={null}
{
"result": true,
"data": [
{ "id": 84, "code": "US", "name": "United States" },
{ "id": 225, "code": "RU", "name": "Russia" },
{ "id": 82, "code": "GB", "name": "United Kingdom" }
]
}
```
***
## Get states
Returns states or regions for a given country.
```http theme={null}
GET /v1/geo/states
```
**Query parameters**
| Parameter | Type | Required | Description |
| :------------- | :----- | :------- | :-------------------------- |
| `country_code` | string | Yes | ISO country code, e.g. `US` |
| `search` | string | No | Filter by region name |
**Scope:** `geo:read`
```bash cURL theme={null}
curl "https://api.2extract.com/v1/geo/states?country_code=US" \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/geo/states",
headers={"X-API-Key": "2xt_YOUR_API_KEY"},
params={"country_code": "US"}
)
print(r.json())
```
**Example response**
```json theme={null}
{
"result": true,
"data": [
{
"id": 1,
"code": 77,
"name": "California",
"extract_parameter": "california"
}
]
}
```
***
## Get cities
Returns cities for a given country, optionally filtered by state.
```http theme={null}
GET /v1/geo/cities
```
**Query parameters**
| Parameter | Type | Required | Description |
| :------------- | :----- | :------- | :------------------------------------------ |
| `country_code` | string | Yes | ISO country code, e.g. `US` |
| `region` | string | No | Region name to filter by, e.g. `California` |
| `search` | string | No | Filter by city name |
**Scope:** `geo:read`
```bash cURL theme={null}
curl "https://api.2extract.com/v1/geo/cities?country_code=US®ion=California" \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/geo/cities",
headers={"X-API-Key": "2xt_YOUR_API_KEY"},
params={"country_code": "US", "region": "California"}
)
print(r.json())
```
**Example response**
```json theme={null}
{
"result": true,
"data": [
{
"id": 32706,
"name": "Los Angeles",
"extract_parameter": "losangeles",
"country_id": 84,
"region_code": 443
}
]
}
```
***
## Get ZIP codes
Returns ZIP codes for a city within a country.
```http theme={null}
GET /v1/geo/zip
```
**Query parameters**
| Parameter | Type | Required | Description |
| :------------- | :----- | :------- | :---------------------------- |
| `country_code` | string | Yes | ISO country code, e.g. `US` |
| `city` | string | Yes | City name, e.g. `Los Angeles` |
**Scope:** `geo:read`
```bash cURL theme={null}
curl "https://api.2extract.com/v1/geo/zip?country_code=US&city=Los+Angeles" \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/geo/zip",
headers={"X-API-Key": "2xt_YOUR_API_KEY"},
params={"country_code": "US", "city": "Los Angeles"}
)
print(r.json())
```
**Example response**
```json theme={null}
{
"result": true,
"data": [
{ "zip": "90001" },
{ "zip": "90002" },
{ "zip": "90003" }
]
}
```
# Public API
Source: https://docs.2extract.com/public-api/introduction
Automate proxy management, monitor traffic, and query geo data with the 2extract REST API.
The 2extract Public API gives you programmatic access to everything you can do in the dashboard: create and configure proxies, track usage, manage your balance, and look up geo data - all over HTTPS with JSON.
Explore and test every endpoint directly in your browser.
Import the ready-made collection and start making requests in minutes.
***
## Base URL
All API requests go to:
```
https://api.2extract.com
```
***
## Authentication
The API uses **API keys** passed in a request header. Every request must include:
```http theme={null}
X-API-Key: 2xt_YOUR_API_KEY
```
**Getting an API key:**
1. Open the [Dashboard](https://2extract.com/app) and go to **API Keys** in the sidebar.
2. Click **Create API Key** and select the permissions you need.
3. Copy the key - it is shown only once.
API keys are secrets. Do not commit them to version control or expose them in client-side code. Rotate a key immediately if it is ever leaked.
### Scopes
Each API key carries one or more scopes that gate access to endpoint groups. Request only the scopes your integration needs.
| Scope | Grants access to |
| :-------------- | :----------------------------------- |
| `proxies:read` | List and retrieve proxy details |
| `proxies:write` | Create, update, and delete proxies |
| `stats:read` | Traffic statistics and usage export |
| `balance:read` | Account balance and balance history |
| `geo:read` | Country, state, city, and ZIP lookup |
`proxies:write` does **not** include `proxies:read` - the scopes are independent.
***
## Request Format
For endpoints that accept a body (`POST`, `PUT`), send JSON and set the `Content-Type` header:
```http theme={null}
Content-Type: application/json
```
***
## Response Format
All responses are JSON wrapped in a standard envelope:
```json theme={null}
{
"result": true,
"data": { ... },
"error": "",
"error_type": "",
"meta": {}
}
```
| Field | Type | Description |
| :----------- | :------------- | :---------------------------------------------- |
| `result` | boolean | `true` on success, `false` on error |
| `data` | object / array | The response payload |
| `error` | string | Human-readable error message (empty on success) |
| `error_type` | string | Machine-readable error code (empty on success) |
| `meta` | object | Pagination or other metadata where applicable |
***
## Error Handling
Error responses use standard HTTP status codes alongside the envelope:
```json theme={null}
{
"result": false,
"error": "API key not found or expired",
"error_type": "unauthorized"
}
```
| HTTP Status | Meaning |
| :----------------- | :--------------------------------------------------------- |
| `400 Bad Request` | Invalid input - check the request body or query parameters |
| `401 Unauthorized` | Missing or invalid API key |
| `403 Forbidden` | Valid key, but insufficient scope for this endpoint |
| `404 Not Found` | The requested resource does not exist |
***
## Quick Example
Retrieve all your proxies with a single `curl` call:
```bash theme={null}
curl https://api.2extract.com/v1/proxy \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
See the [Swagger UI](https://api.2extract.com/swagger/index.html) for a full interactive reference of every endpoint, including request schemas and live response examples.
# Proxies
Source: https://docs.2extract.com/public-api/proxies
Create, configure, and delete proxy lists. Required scopes: proxies:read and/or proxies:write.
See the [Swagger UI](https://api.2extract.com/swagger/index.html) for live request/response schemas and to try endpoints directly in your browser.
***
## List proxies
Returns all proxy lists owned by the authenticated user with full details: tariff, limits, traffic usage, and settings.
```http theme={null}
GET /v1/proxy
```
**Query parameters**
| Parameter | Type | Required | Description |
| :--------------- | :------ | :------- | :-------------------------------------------------------------------------------------------------- |
| `status` | string | No | Filter by status. Comma-separated: `active,pending` |
| `search` | string | No | Partial name match (case-insensitive) |
| `limit` | integer | No | Items per page. Default: `100` |
| `page` | integer | No | Page number starting from `0`. Default: `0` |
| `order` | string | No | Sort direction: `asc` or `desc`. Default: `desc` |
| `order_by` | string | No | Sort field: `name`, `status`, `tariff.name`, `traffic_used.total_used`, `total_spent`, `created_at` |
| `statistic_from` | string | No | Start date for traffic statistics period (`YYYY-MM-DD`) |
| `statistic_to` | string | No | End date for traffic statistics period (`YYYY-MM-DD`) |
**Scope:** `proxies:read`
```bash cURL theme={null}
curl https://api.2extract.com/v1/proxy \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/proxy",
headers={"X-API-Key": "2xt_YOUR_API_KEY"}
)
print(r.json())
```
***
## Create proxy
Provisions a new proxy list.
```http theme={null}
POST /v1/proxy
```
**Request body**
| Field | Type | Required | Description |
| :------------------- | :--------- | :------- | :-------------------------------------------------------------------------------------------------- |
| `name` | string | Yes | Proxy name. Lowercase letters, digits, and underscores only. Immutable after creation. |
| `proxy_type` | string | Yes | `residential` or `mobile` |
| `tariff_id` | integer | Yes | Plan ID. Get available plans from [GET /v1/plans](/public-api/balance#get-plans). |
| `countries` | integer\[] | No | List of country IDs to target. Get IDs from [GET /v1/geo/countries](/public-api/geo#get-countries). |
| `description` | string | No | Human-readable label |
| `ip_whitelist` | string\[] | No | IP addresses allowed to connect to this proxy |
| `limits` | object | No | Spending or traffic limits (see below) |
| `limits.limit_type` | string | No | `money` or `traffic` |
| `limits.time_period` | string | No | `daily` or `monthly` |
| `limits.total_limit` | number | No | Limit value. For `money` - USD. For `traffic` - bytes. |
**Scope:** `proxies:write`
```bash cURL theme={null}
curl -X POST https://api.2extract.com/v1/proxy \
-H "X-API-Key: 2xt_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "myproxylist01",
"proxy_type": "residential",
"tariff_id": 1,
"countries": [84],
"description": "My personal proxy list",
"ip_whitelist": ["192.168.1.1"],
"limits": {
"limit_type": "money",
"time_period": "monthly",
"total_limit": 100
}
}'
```
```python Python theme={null}
import requests
r = requests.post(
"https://api.2extract.com/v1/proxy",
headers={"X-API-Key": "2xt_YOUR_API_KEY"},
json={
"name": "myproxylist01",
"proxy_type": "residential",
"tariff_id": 1,
"countries": [84],
"description": "My personal proxy list"
}
)
print(r.json())
```
**Example response**
```json theme={null}
{
"result": true,
"data": {
"id": "86Rf07",
"name": "myproxylist01",
"description": "My personal proxy list",
"host": "proxy.2extract.net",
"port": 5555,
"password": "1jw9j7zwwur",
"status": "active",
"type": "residential",
"user_id": 123,
"created_at": "2026-01-01T10:00:00Z",
"updated_at": "2026-01-01T10:00:00Z"
}
}
```
***
## Get proxy
Returns full details for a single proxy list.
```http theme={null}
GET /v1/proxy/{id}
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :---------------------------- |
| `id` | string | Proxy list ID (e.g. `86Rf07`) |
**Scope:** `proxies:read`
```bash cURL theme={null}
curl https://api.2extract.com/v1/proxy/86Rf07 \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/proxy/86Rf07",
headers={"X-API-Key": "2xt_YOUR_API_KEY"}
)
print(r.json())
```
***
## Update proxy
Updates settings for an existing proxy list. Only fields included in the request body are changed.
```http theme={null}
PUT /v1/proxy/{id}
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :------------ |
| `id` | string | Proxy list ID |
**Request body**
| Field | Type | Description |
| :------------- | :--------- | :--------------------------------- |
| `countries` | integer\[] | Replace the country targeting list |
| `description` | string | Update the description |
| `status` | string | Proxy status, e.g. `active` |
| `ip_whitelist` | string\[] | Replace the IP whitelist |
| `limits` | object | Update spending or traffic limits |
**Scope:** `proxies:write`
```bash cURL theme={null}
curl -X PUT https://api.2extract.com/v1/proxy/86Rf07 \
-H "X-API-Key: 2xt_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"countries": [84],
"description": "Updated description",
"status": "active"
}'
```
```python Python theme={null}
import requests
r = requests.put(
"https://api.2extract.com/v1/proxy/86Rf07",
headers={"X-API-Key": "2xt_YOUR_API_KEY"},
json={"description": "Updated description", "status": "active"}
)
print(r.json())
```
***
## Delete proxy
Soft-deletes a proxy list. The proxy stops accepting connections immediately.
```http theme={null}
DELETE /v1/proxy/{id}
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :------------ |
| `id` | string | Proxy list ID |
**Scope:** `proxies:write`
```bash theme={null}
curl -X DELETE https://api.2extract.com/v1/proxy/86Rf07 \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
***
## Update proxy limits
Sets or replaces the spending or traffic limit for a proxy list.
```http theme={null}
PUT /v1/proxy/{id}/limits
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :------------ |
| `id` | string | Proxy list ID |
**Request body**
| Field | Type | Required | Description |
| :------------ | :----- | :------- | :--------------------------------- |
| `limit_type` | string | Yes | `money` (USD) or `traffic` (bytes) |
| `time_period` | string | Yes | `daily` or `monthly` |
| `total_limit` | number | Yes | The limit value |
**Scope:** `proxies:write`
```bash theme={null}
curl -X PUT https://api.2extract.com/v1/proxy/86Rf07/limits \
-H "X-API-Key: 2xt_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"limit_type": "money",
"time_period": "monthly",
"total_limit": 100
}'
```
***
## Update IP whitelist
Replaces the full IP whitelist for a proxy list. Only IPs on this list are allowed to connect.
```http theme={null}
PUT /v1/proxy/{id}/whitelist
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :------------ |
| `id` | string | Proxy list ID |
**Request body**
| Field | Type | Required | Description |
| :---- | :-------- | :------- | :-------------------------------------------------------------------------------- |
| `ips` | string\[] | Yes | Full replacement list of authorized IPv4 addresses. Send an empty array to clear. |
**Scope:** `proxies:write`
```bash theme={null}
curl -X PUT https://api.2extract.com/v1/proxy/86Rf07/whitelist \
-H "X-API-Key: 2xt_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ips": ["1.2.3.4"]}'
```
***
## Get target hosts whitelist
Returns the list of target hosts this proxy is allowed to connect to. An empty list means no restriction.
```http theme={null}
GET /v1/proxy/{id}/target-hosts-whitelist
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :------------ |
| `id` | string | Proxy list ID |
**Scope:** `proxies:read`
```bash theme={null}
curl https://api.2extract.com/v1/proxy/86Rf07/target-hosts-whitelist \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
***
## Set target hosts whitelist
Replaces the target hosts whitelist. When set, the proxy will only forward traffic to the listed hosts. Supports wildcards (e.g. `*.example.com`).
```http theme={null}
POST /v1/proxy/{id}/target-hosts-whitelist
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :------------ |
| `id` | string | Proxy list ID |
**Request body**
| Field | Type | Required | Description |
| :------------- | :-------- | :------- | :-------------------------------------------------------------------- |
| `target_hosts` | string\[] | Yes | Full replacement list. Send an empty array to remove the restriction. |
**Scope:** `proxies:write`
```bash theme={null}
curl -X POST https://api.2extract.com/v1/proxy/86Rf07/target-hosts-whitelist \
-H "X-API-Key: 2xt_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target_hosts": ["example.com"]}'
```
***
## Regenerate password
Generates a new password for a proxy list and invalidates the old one. All active connections using the old password will be dropped.
```http theme={null}
POST /v1/proxy/{id}/password
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :------------ |
| `id` | string | Proxy list ID |
**Scope:** `proxies:write`
```bash theme={null}
curl -X POST https://api.2extract.com/v1/proxy/86Rf07/password \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
**Example response**
```json theme={null}
{
"result": true,
"data": {
"id": "86Rf07",
"password": "newpassword123"
}
}
```
# Statistics
Source: https://docs.2extract.com/public-api/statistics
Query traffic usage across all your proxies. Required scope: stats:read.
See the [Swagger UI](https://api.2extract.com/swagger/index.html) for live request/response schemas and to try endpoints directly in your browser.
***
## Get traffic stats
Returns aggregated traffic usage for the authenticated user across all proxies for a given date range.
```http theme={null}
GET /v1/user/traffic
```
**Query parameters**
| Parameter | Type | Required | Description |
| :---------- | :----- | :------- | :-------------------------------- |
| `date_from` | string | Yes | Start date in `YYYY-MM-DD` format |
| `date_to` | string | Yes | End date in `YYYY-MM-DD` format |
**Scope:** `stats:read`
```bash cURL theme={null}
curl "https://api.2extract.com/v1/user/traffic?date_from=2026-01-01&date_to=2026-12-31" \
-H "X-API-Key: 2xt_YOUR_API_KEY"
```
```python Python theme={null}
import requests
r = requests.get(
"https://api.2extract.com/v1/user/traffic",
headers={"X-API-Key": "2xt_YOUR_API_KEY"},
params={"date_from": "2026-01-01", "date_to": "2026-12-31"}
)
print(r.json())
```
***
## Export proxy usage (CSV)
Downloads a CSV file with a per-day breakdown of traffic and spend for a specific proxy list. Useful for billing reconciliation and pipeline monitoring.
```http theme={null}
GET /v1/proxy/{id}/usage/export
```
**Path parameters**
| Parameter | Type | Description |
| :-------- | :----- | :---------------------------- |
| `id` | string | Proxy list ID (e.g. `86Rf07`) |
**Query parameters**
| Parameter | Type | Required | Description |
| :---------- | :----- | :------- | :-------------------------------- |
| `date_from` | string | Yes | Start date in `YYYY-MM-DD` format |
| `date_to` | string | Yes | End date in `YYYY-MM-DD` format |
**Response:** `text/csv` file download.
**Scope:** `stats:read`
```bash theme={null}
curl "https://api.2extract.com/v1/proxy/86Rf07/usage/export?date_from=2026-01-01&date_to=2026-12-31" \
-H "X-API-Key: 2xt_YOUR_API_KEY" \
-o proxy-usage-2026.csv
```
# Product Updates
Source: https://docs.2extract.com/release-notes/product-updates
Changelog of notable releases.
This release introduces a complete new user onboarding experience designed to get you productive with proxies faster, plus new export capabilities and several bug fixes across the dashboard.
**🚀 New Features**
* **Welcome Wizard:** An interactive modal that guides you through key setup steps after you sign up.
* **Getting Started Checklist:** A floating progress widget that tracks your onboarding journey and keeps you on track.
* **My Proxies CSV Export:** Export your proxy list directly to CSV from the My Proxies dashboard.
**✨ Improvements**
* **API Keys:** Added direct documentation links in the header and improved the empty state to help you get started faster.
* **Integrations tab:** Improved initial state behavior for better clarity.
**🐛 Bug Fixes**
* Fixed validation preventing profile saves with an empty country field.
* Fixed SMM & Accounts preset showing a numeric code instead of the selected city name.
* Fixed negative dips appearing on the Usage Overview chart.
* Added missing favicon.
This release brings a complete redesign of the billing experience, giving you more control over how you pay and making it easier to track your transaction history.
**🚀 New Features**
* **Multiple Payment Methods:** You can now choose to pay with either your bank card or cryptocurrency - select what works best for your workflow.
**✨ Improvements**
* **Redesigned Billing Screen:** The payment interface has been rebuilt for better clarity and faster top-ups.
* **Transaction History Tab:** Your transaction history is now in a dedicated tab, making it easier to browse and track past activity without clutter.
* **Balance After Column:** Each transaction now shows the balance after it was applied, giving you better visibility into your account state at each step.
* **Deposit Validation:** Minimum deposit amounts are now validated to ensure your payment attempts succeed on the first try.
This release launches the public API with API key authentication, making it easy to integrate 2extract proxies into your applications and workflows. We've also improved session reliability and fixed several edge cases in balance management.
**🚀 New Features**
* **Public API:** The public API is now available and fully authenticated via API keys. Use it to programmatically create proxies, manage your account, check your balance, and retrieve traffic statistics. Perfect for automation and integration into your development pipelines.
* **API Key Management:** A new section in your dashboard lets you create, copy, view, and revoke API keys with full control over your account access.
**✨ Improvements**
* **Sticky IP Mode (`-const`):** We improved the `-const` parameter behavior - it now guarantees your proxy IP will not change between requests.
* **My Proxies Page:** The empty state now displays up-to-date pricing for both residential and mobile proxies, so you know the costs before creating your first proxy. Proxy creation is also protected by a balance check - you cannot create a proxy if you don't have sufficient funds.
**🐛 Bug Fixes**
* Fixed an edge case where balance top-ups failed to process correctly in certain scenarios.
This release adds promo codes and coupons to the billing page, along with several reliability and display fixes.
**🚀 New Features**
* **Promo Codes & Coupons:** A new section on the Billing page lets you redeem coupons (adds a fixed amount directly to your balance) or enter a promo code during top-up to get a percentage bonus on the current amount.
**🐛 Bug Fixes**
* Fixed an issue where proxy traffic wasn't immediately available after a successful balance top-up.
* Fixed incorrect balance rounding in the dashboard display.
* Fixed multiple error and validation message texts throughout the dashboard.
* Various quality-of-life improvements across the platform.
This release introduces mobile proxy support, a fully redesigned proxy management interface, and ISP-level targeting.
**🚀 New Features**
* **Mobile Proxies:** Mobile proxies are now available in your dashboard. Create a mobile proxy, select Pay-As-You-Go pricing at \$4.99/GB, and manage it alongside your residential proxies.
* **ISP Targeting:** Route your traffic through a specific Internet Service Provider. Select an ISP directly in the proxy Configuration block when setting up or editing a proxy.
* **Proxy Settings Screen:** The proxy detail page has been fully redesigned with three tabs - Overview (traffic and status), Settings (geo, session, and rotation parameters), and Integration (connection constructor with ready-to-copy credentials).
* **Quick Connect:** A new Quick Connect option on the My Proxies screen lets you grab connection credentials instantly without opening the full settings page.
* **Antidetect Browser Import:** The Integration tab now includes a credential generator for Antidetect Browsers. Each connection line gets a unique session number, so you can import a ready-to-use proxy list directly into your browser profile manager.
**✨ Improvements**
* **My Proxies Screen:** Redesigned list layout with proxy limits now visible directly in the table and a Date Range filter for narrowing down traffic statistics.
* **Create Proxy Screen:** The proxy creation flow has been reworked. A built-in name generator helps you create a valid proxy name in one click.
* **Proxy Names:** Underscores (`_`) are now allowed in proxy names.
* **Proxy Status Display:** Proxy statuses are now shown correctly across the My Proxies and Proxy Settings screens.
* **Session Security:** Changing your password now immediately invalidates all active sessions on other devices.
**🐛 Bug Fixes**
* Fixed a connection drop occurring every 5 minutes when routing traffic through a proxy.
* Fixed an error shown after clicking "Create Your First Proxy" when the proxy list was empty.
* Fixed a database error during OAuth registration via Google or GitHub.
This release focuses on security controls, flexible billing capabilities for enterprise clients, and better communication regarding identity verification.
**🔐 Security & Access**
* **Password Regeneration:** You can now regenerate the password for any proxy instance directly from the dashboard. This is crucial for security rotation or if you suspect your credentials have been compromised.
**💳 Billing & Enterprise Features**
* **Credit Line Support:** Implemented logic to allow specific accounts to operate with a negative balance (post-payment model), ensuring uninterrupted service for trusted partners.
* **Custom Pricing:** The system now fully supports and correctly displays personalized tariff rates assigned by our sales team, replacing the standard list prices where applicable.
**🔔 Notifications**
* **KYC Status Emails:** Automated email notifications are now sent immediately when your Identity Verification status changes (Approved or Declined), keeping you in the loop without needing to check the profile page.
This release introduces powerful ISP targeting via ASN, allowing you to route traffic through specific networks.
**📡 ASN (ISP) Targeting**
* **New Targeting Mode:** Added a dedicated toggle in **Proxy Settings** to switch between "Location" and "ASN" targeting modes. You can now configure your proxy to target specific Internet Service Providers (ISPs) directly from the dashboard.
* **Gateway Support:** The proxy gateway now officially supports the **`-asn`** parameter in the connection string (e.g., `user...-asn-7922`), allowing for precise network selection at the request level.
This release unlocks granular targeting by ZIP code and polishes the connection string generator for a smoother integration experience.
**📍 ZIP Code Targeting**
* **Gateway Support:** The proxy gateway now supports the **`-zip`** parameter in the username string, allowing for ultra-precise geo-targeting.
* **UI Integration:** The Proxy Settings interface now fully supports the ZIP code selector via the API, making it easy to generate the correct connection string within the Connection Helper.
**🛠 Connection Helper Improvements**
* **Smart Randomization:** When selecting "Sticky Session", the generator now automatically creates a **random Session ID**. You no longer need to manually invent a random string to test sticky sessions.
* **Parameter Fixes:** Fixed an issue where the `-time` parameter was not correctly applied to the generated connection string.
**✨ Interface & Clarity**
* **Status Messages:** Improved the readability of the proxy status when a spending limit is reached.
* **Copyright Update:** Updated email templates and footer information for 2026.
This update brings precision to your proxy targeting with City and State support, along with core stability improvements and interface refinements.
**🌍 Advanced Geo-Targeting**
* **State & City Support:** You can now target specific locations with greater precision. We have integrated comprehensive dictionaries for global **Regions (States)** and **Cities** directly into the Proxy Settings and connection string generator.
* **Smart Routing:** The proxy gateway now officially supports `-state` and `-city` parameters for granular traffic routing.
**✨ UI/UX Improvements**
* **Spending Limits Visibility:** You can now see the set **USD (\$) limits** for each proxy directly in the "My Proxies" table, making budget monitoring faster.
* **Input Validation:** Enforced integer-only input for the Session Time field to prevent configuration errors.
**⚙️ Core & Stability**
* **Proxy Name Parsing:** Completely refactored the username parsing logic on the gateway. This eliminates edge-case collisions between proxy names and configuration parameters.
This release introduces flexible sticky session timing, enhanced security with KYC limits, and a smoother proxy creation experience.
**🚀 New Features**
* **Sticky Session Duration:** Added support for the `-time-[minutes]` parameter. You can now define exactly how long an IP remains assigned during a sticky session directly in your connection string.
* **KYC Deposit Limits:** To enhance platform security, we implemented a **\$50 cumulative deposit limit** for unverified accounts.
* **Verification Flow:** Added a helpful popup that guides you through the Identity Verification (KYC) process immediately if you attempt to top up beyond the unverified limit.
**✨ UX Improvements**
* **Proxy Creation Experience:** Completely redesigned the "Create Proxy" interaction. The button now features a **progressive loader** showing real-time status steps and provides clearer error messages if resource allocation fails.
This update focuses on more reliable analytics, cleaner empty states across key pages, and multiple UX + billing fixes.
**🚀 New Features**
* **User Avatars:** Added a dynamic avatar generator for users in the sidebar.
* **Proxy Settings Hint:** Added an **info (“i”) icon** with a hover tooltip next to the **Username** field for better guidance.
**✨ Improvements**
* **Dashboard Onboarding:** Improved empty states for the **new user Dashboard**, including a clearer “Getting started” experience.
* **Recently Used Proxies Widget:** Updated the empty state logic to better reflect user progress and show more helpful guidance.
* **Dashboard cURL Block:** Added an instructional placeholder in the cURL snippet area to reduce first-run confusion.
* **Billing Empty State:** Added an empty state for the **Billing** screen and **Transaction History** table.
* **My Proxies Sorting UI:** Added sorting direction indicators in table headers.
**🐛 Bug Fixes**
* Fixed an issue where the welcome email was not sent after signing up via OAuth.
* Fixed placeholder behavior when searching proxy lists by name returns no results.
* Fixed missing error highlighting when entering a top-up amount below **\$10**.
* Addressed multiple issues and inconsistencies across the sign up / sign in forms.
* Fixed various email template layout/rendering issues.
This release brings seamless social login, improved security measures, and data export capabilities.
**🚀 New Features**
* **OAuth Integration:** Added support for **Google** and **GitHub** login. You can now sign up or sign in with a single click.
* **CSV Export:** Added a "Download CSV" button to the Usage Statistics section in Proxy Settings for offline analysis.
* **Security:** Integrated reCAPTCHA protection for the login form to prevent automated attacks.
**✨ Improvements**
* **Authentication Flow:** Completely redesigned the registration and login screens for a better user experience.
* **Password Policy:** Updated and simplified password complexity requirements for registration and password reset.
* **OAuth Logic:** Improved handling of registration/authorization scenarios via OAuth for previously deleted accounts.
**🐛 Bug Fixes**
* Fixed an issue where the `+` symbol in emails was incorrectly replaced with a space.
* Restored missing images in system emails and updated links.
* Fixed default limit values when creating a proxy via API.
* Resolved an issue where the user profile data was not refreshing after saving changes.
* Fixed various UI glitches related to billing modals and proxy status display.
In this update, we focused on improving financial controls, enhancing navigation for large lists, and fixing critical bugs.
**🚀 New Features & Improvements**
* **Spending Limits (\$):** You can now set usage limits for proxies in USD. This makes budget control much easier.
* **Billing Transparency:** Added `Type` and `Description` fields to the transaction history for better clarity.
* **Real-time Data:** Traffic data on the "My Proxies" page now updates automatically—no page reload required.
* **Pagination & Search:** Added pagination to lists and the ability to search for proxies by name.
**🐛 Bug Fixes**
* Fixed an issue where the "Delete" button was unresponsive on the proxy list page.
* Fixed a bug where the account balance was not updating correctly after setting a monetary limit.
Our first public version of the accounts dashboard.
* Released a first version of the product.
* Features Residential proxies and Pas-As-You-Go billing model.