[{"data":1,"prerenderedAt":348},["ShallowReactive",2],{"docsv3-nav":3,"\u002Fdocs\u002Fv3\u002Fconcepts\u002Fbots":198},[4],{"title":5,"path":6,"stem":7,"children":8,"page":188},"V3","\u002Fdocs\u002Fv3","1.docs\u002Fv3",[9,13,17,21,38,87,189],{"title":10,"path":11,"stem":12},"Introduction","\u002Fdocs\u002Fv3\u002Fintroduction","1.docs\u002Fv3\u002F1.Introduction",{"title":14,"path":15,"stem":16},"Quick start","\u002Fdocs\u002Fv3\u002Fquick-start","1.docs\u002Fv3\u002F2.Quick start",{"title":18,"path":19,"stem":20},"Challenge flow","\u002Fdocs\u002Fv3\u002Fchallenge-flow","1.docs\u002Fv3\u002F3.Challenge flow",{"title":22,"path":23,"stem":24,"children":25},"Fundamentals","\u002Fdocs\u002Fv3\u002Ffundamentals","1.docs\u002Fv3\u002F4.fundamentals",[26,30,34],{"title":27,"path":28,"stem":29},"Signup protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Fsignup-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F00.Signup protection",{"title":31,"path":32,"stem":33},"Login protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Flogin-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F01.Login protection",{"title":35,"path":36,"stem":37},"Access protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Faccess-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F02.Access protection",{"title":39,"path":40,"stem":41,"children":42},"Guides","\u002Fdocs\u002Fv3\u002Fguides","1.docs\u002Fv3\u002F5.guides",[43,47,51,55,59,63,67,71,75,79,83],{"title":44,"path":45,"stem":46},"Account sharing prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-sharing-prevention","1.docs\u002Fv3\u002F5.guides\u002F1.Account sharing prevention",{"title":48,"path":49,"stem":50},"Web scraping prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fweb-scraping-prevention","1.docs\u002Fv3\u002F5.guides\u002F13.Web scraping prevention",{"title":52,"path":53,"stem":54},"Ban enforcement","\u002Fdocs\u002Fv3\u002Fguides\u002Fban-enforcement","1.docs\u002Fv3\u002F5.guides\u002F14.Ban enforcement",{"title":56,"path":57,"stem":58},"Chargeback dispute","\u002Fdocs\u002Fv3\u002Fguides\u002Fchargeback-dispute","1.docs\u002Fv3\u002F5.guides\u002F15.Chargeback dispute",{"title":60,"path":61,"stem":62},"Multi-accounting prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fmulti-accounting-prevention","1.docs\u002Fv3\u002F5.guides\u002F16.Multi-accounting prevention",{"title":64,"path":65,"stem":66},"Account takeover prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-takeover-prevention","1.docs\u002Fv3\u002F5.guides\u002F2.Account takeover prevention",{"title":68,"path":69,"stem":70},"Risky transaction prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Frisky-transaction-prevention","1.docs\u002Fv3\u002F5.guides\u002F20.Risky transaction prevention",{"title":72,"path":73,"stem":74},"Fake account detection","\u002Fdocs\u002Fv3\u002Fguides\u002Ffake-account-detection","1.docs\u002Fv3\u002F5.guides\u002F3.Fake account detection",{"title":76,"path":77,"stem":78},"Bot detection","\u002Fdocs\u002Fv3\u002Fguides\u002Fbot-detection","1.docs\u002Fv3\u002F5.guides\u002F4.Bot detection",{"title":80,"path":81,"stem":82},"Card testing prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fcard-testing-prevention","1.docs\u002Fv3\u002F5.guides\u002F5.Card testing prevention",{"title":84,"path":85,"stem":86},"Incentive abuse prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fincentive-abuse-prevention","1.docs\u002Fv3\u002F5.guides\u002F9.Incentive abuse prevention",{"title":88,"path":89,"stem":90,"children":91,"page":188},"Concepts","\u002Fdocs\u002Fv3\u002Fconcepts","1.docs\u002Fv3\u002F6.concepts",[92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184],{"title":93,"path":94,"stem":95},"Evaluations","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fevaluations","1.docs\u002Fv3\u002F6.concepts\u002F01.evaluations",{"title":97,"path":98,"stem":99},"Actions","\u002Fdocs\u002Fv3\u002Fconcepts\u002Factions","1.docs\u002Fv3\u002F6.concepts\u002F02.actions",{"title":101,"path":102,"stem":103},"Signals","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fsignals","1.docs\u002Fv3\u002F6.concepts\u002F03.signals",{"title":105,"path":106,"stem":107},"Checks","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fchecks","1.docs\u002Fv3\u002F6.concepts\u002F04.checks",{"title":109,"path":110,"stem":111},"Risks","\u002Fdocs\u002Fv3\u002Fconcepts\u002Frisks","1.docs\u002Fv3\u002F6.concepts\u002F05.risks",{"title":113,"path":114,"stem":115},"Verdicts","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fverdicts","1.docs\u002Fv3\u002F6.concepts\u002F06.verdicts",{"title":117,"path":118,"stem":119},"Policies","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fpolicies","1.docs\u002Fv3\u002F6.concepts\u002F07.policies",{"title":121,"path":122,"stem":123},"Challenges","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fchallenges","1.docs\u002Fv3\u002F6.concepts\u002F08.challenges",{"title":125,"path":126,"stem":127},"Concurrency","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fconcurrency","1.docs\u002Fv3\u002F6.concepts\u002F09.concurrency",{"title":129,"path":130,"stem":131},"Impossible travel","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fimpossible-travel","1.docs\u002Fv3\u002F6.concepts\u002F10.impossible-travel",{"title":133,"path":134,"stem":135},"Bots","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fbots","1.docs\u002Fv3\u002F6.concepts\u002F11.bots",{"title":137,"path":138,"stem":139},"Devices","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fdevices","1.docs\u002Fv3\u002F6.concepts\u002F12.devices",{"title":141,"path":142,"stem":143},"Fingerprints","\u002Fdocs\u002Fv3\u002Fconcepts\u002Ffingerprints","1.docs\u002Fv3\u002F6.concepts\u002F13.fingerprints",{"title":145,"path":146,"stem":147},"People","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fpeople","1.docs\u002Fv3\u002F6.concepts\u002F14.people",{"title":149,"path":150,"stem":151},"Lists","\u002Fdocs\u002Fv3\u002Fconcepts\u002Flists","1.docs\u002Fv3\u002F6.concepts\u002F15.lists",{"title":153,"path":154,"stem":155},"Account takeover","\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-takeover","1.docs\u002Fv3\u002F6.concepts\u002F16.account-takeover",{"title":157,"path":158,"stem":159},"Account sharing","\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-sharing","1.docs\u002Fv3\u002F6.concepts\u002F17.account-sharing",{"title":161,"path":162,"stem":163},"Fake account","\u002Fdocs\u002Fv3\u002Fconcepts\u002Ffake-account","1.docs\u002Fv3\u002F6.concepts\u002F18.fake-account",{"title":165,"path":166,"stem":167},"Scraping","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fscraping","1.docs\u002Fv3\u002F6.concepts\u002F19.scraping",{"title":169,"path":170,"stem":171},"Linked accounts","\u002Fdocs\u002Fv3\u002Fconcepts\u002Flinked-accounts","1.docs\u002Fv3\u002F6.concepts\u002F20.linked-accounts",{"title":173,"path":174,"stem":175},"New IP","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fip","1.docs\u002Fv3\u002F6.concepts\u002F21.ip",{"title":177,"path":178,"stem":179},"Anonymizing network","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fanonymizing-network","1.docs\u002Fv3\u002F6.concepts\u002F22.anonymizing-network",{"title":181,"path":182,"stem":183},"Email quality","\u002Fdocs\u002Fv3\u002Fconcepts\u002Femail","1.docs\u002Fv3\u002F6.concepts\u002F23.email",{"title":185,"path":186,"stem":187},"Velocity","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fvelocity","1.docs\u002Fv3\u002F6.concepts\u002F24.velocity",false,{"title":190,"path":191,"stem":192,"children":193,"page":188},"Advanced","\u002Fdocs\u002Fv3\u002Fadvanced","1.docs\u002Fv3\u002F7.Advanced",[194],{"title":195,"path":196,"stem":197},"Proxy setup","\u002Fdocs\u002Fv3\u002Fadvanced\u002Fproxy-setup","1.docs\u002Fv3\u002F7.Advanced\u002F1.Proxy-setup",{"id":199,"title":133,"body":200,"description":341,"extension":342,"meta":343,"navigation":344,"path":134,"rawbody":345,"seo":346,"stem":135,"__hash__":347},"docsv3\u002F1.docs\u002Fv3\u002F6.concepts\u002F11.bots.md",{"type":201,"value":202,"toc":334},"minimark",[203,207,211,216,224,227,243,255,259,273,299,303],[204,205,133],"h1",{"id":206},"bots",[208,209,210],"p",{},"Bots are automated, non-human traffic: scripts driving a real browser, headless engines, or full automation frameworks pretending to be human. They show up across every fraud surface: signup farms, credential stuffing, scraping, payment testing.",[212,213,215],"h2",{"id":214},"how-rupt-detects-bots","How Rupt detects bots",[208,217,218,219,223],{},"Bot detection runs entirely off ",[220,221,222],"a",{"href":102},"signals",": a mix of behavioral, cryptographic, and platform probes weighed together. No single tell is decisive; the score comes from how many line up at once.",[208,225,226],{},"A few illustrative examples:",[228,229,230,234,237,240],"ul",{},[231,232,233],"li",{},"A browser that openly reports it's being driven by automation.",[231,235,236],{},"Automation frameworks that leave traces in the page environment.",[231,238,239],{},"Interactions that were dispatched by code rather than a real person.",[231,241,242],{},"Headless-browser giveaways: rendering and hardware details that don't match a real screen.",[208,244,245,246,250,251,254],{},"That's a sample, not the full set. The complete list is deliberately unpublished, since a public checklist is just an evasion guide. Rupt weighs the indicators together into the ",[247,248,249],"code",{},"bot"," ",[220,252,253],{"href":110},"risk"," category.",[212,256,258],{"id":257},"observation-only-by-default","Observation-only by default",[208,260,261,262,264,265,268,269,272],{},"The ",[247,263,249],{}," risk is observation-only: Rupt records the score on every ",[220,266,267],{"href":94},"evaluation"," but doesn't use it to choose a ",[220,270,271],{"href":114},"verdict",". This is deliberate: bot policy is product-specific. A scraping API wants to block every bot; a search-engine-friendly site wants crawlers to pass.",[208,274,275,276,278,279,282,283,285,286,289,290,294,295,298],{},"For now, read the ",[247,277,249],{}," score off the evaluation and act on it in your own logic. Matching a ",[220,280,281],{"href":118},"policy"," on the ",[247,284,249],{}," risk directly is coming soon. In the meantime, the ",[220,287,288],{"href":106},"checks"," that policies ",[291,292,293],"em",{},"can"," match catch a lot of automated traffic on their own: ",[247,296,297],{},"ip_is_hosting"," in particular gates most cloud-run bots.",[212,300,302],{"id":301},"pairs-well-with","Pairs well with",[228,304,305,314,323],{},[231,306,307,313],{},[308,309,310],"strong",{},[247,311,312],{},"tampering",": bots that try to disguise themselves usually trip tampering checks too.",[231,315,316,319,320,322],{},[308,317,318],{},"Hosting IPs",": the most aggressive bots run from cloud infrastructure, so ",[247,321,297],{}," tends to fire alongside a high bot score.",[231,324,325,330,331,333],{},[308,326,327],{},[247,328,329],{},"anti_fingerprinting",": bots that layer anti-fingerprinting tooling surface through the ",[247,332,329],{}," risk.",{"title":335,"searchDepth":336,"depth":336,"links":337},"",2,[338,339,340],{"id":214,"depth":336,"text":215},{"id":257,"depth":336,"text":258},{"id":301,"depth":336,"text":302},"Bots are automated, non-human traffic. Rupt classifies bot risk from a battery of behavioral and cryptographic signals, but treats it as observation-only so you choose how to respond.","md",{},true,"---\ntitle: Bots\ndescription: Bots are automated, non-human traffic. Rupt classifies bot risk from a battery of behavioral and cryptographic signals, but treats it as observation-only so you choose how to respond.\n---\n\n# Bots\n\nBots are automated, non-human traffic: scripts driving a real browser, headless engines, or full automation frameworks pretending to be human. They show up across every fraud surface: signup farms, credential stuffing, scraping, payment testing.\n\n## How Rupt detects bots\n\nBot detection runs entirely off [signals](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fsignals): a mix of behavioral, cryptographic, and platform probes weighed together. No single tell is decisive; the score comes from how many line up at once.\n\nA few illustrative examples:\n\n- A browser that openly reports it's being driven by automation.\n- Automation frameworks that leave traces in the page environment.\n- Interactions that were dispatched by code rather than a real person.\n- Headless-browser giveaways: rendering and hardware details that don't match a real screen.\n\nThat's a sample, not the full set. The complete list is deliberately unpublished, since a public checklist is just an evasion guide. Rupt weighs the indicators together into the `bot` [risk](\u002Fdocs\u002Fv3\u002Fconcepts\u002Frisks) category.\n\n## Observation-only by default\n\nThe `bot` risk is observation-only: Rupt records the score on every [evaluation](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fevaluations) but doesn't use it to choose a [verdict](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fverdicts). This is deliberate: bot policy is product-specific. A scraping API wants to block every bot; a search-engine-friendly site wants crawlers to pass.\n\nFor now, read the `bot` score off the evaluation and act on it in your own logic. Matching a [policy](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fpolicies) on the `bot` risk directly is coming soon. In the meantime, the [checks](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fchecks) that policies *can* match catch a lot of automated traffic on their own: `ip_is_hosting` in particular gates most cloud-run bots.\n\n## Pairs well with\n\n- **`tampering`**: bots that try to disguise themselves usually trip tampering checks too.\n- **Hosting IPs**: the most aggressive bots run from cloud infrastructure, so `ip_is_hosting` tends to fire alongside a high bot score.\n- **`anti_fingerprinting`**: bots that layer anti-fingerprinting tooling surface through the `anti_fingerprinting` risk.\n",{"title":133,"description":341},"7vIRRxae069W55wzUivWwrxPGuie_TV64Gvre7fJkdA",1780344893487]