← All AI Engineer talks

AI Engineer World's Fair 2026

The Missing Layer in Agentic AI — Giedrius Šteimantas, Oxylabs

Read the talk

The Missing Layer in Agentic AI: Building Reliable Web Access

Giedrius Šteimantas rebuilds a shopping agent around search, validated product retrieval, and browser-based checkout, showing how infrastructure choices affect reliability and token cost.

From a talk by Giedrius Šteimantas

At a glance

Ideas worth remembering

  • Match web access to the stage: search for candidate URLs, retrieve validated product content for decisions, and use browser automation for checkout after user approval.

  • HTTP status and response size cannot establish content validity. Detect blocks before model processing, and validate before compression so unusable pages do not consume evaluation tokens.

  • Compact JSON and Markdown reduce the material an agent must process. A scraper API can also hide necessary browser rendering behind a simpler retrieval interface.

  • Keep geographic context consistent between product verification and checkout because retailers can vary stock and sizes by location.

  • The reported latency, response size, reliability, and billing benefits are the speaker's service claims. The ten-page example illustrates wasted processing; its 70% token figure is not a measured token breakdown.

A shopping agent whose infrastructure could not keep up

Giedrius Šteimantas opens with a friend's personal shopping agent. A chatbot discussed a customer's style and helped identify items, then produced prompts for another agent to find and purchase those items online. The idea depended on a handoff from conversational preferences to actual interactions with retailers.

The implementation used a browser automation framework for everything. Access failures, including CAPTCHA challenges in place of product pages, made it slow, expensive, and unreliable. Šteimantas identifies the missing piece as an infrastructure layer that would let the agent operate on the open web. The shopping logic could exist while the machinery supplying its evidence and executing its actions still failed.

0:180:30
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:01 · section reference included

Cost matters at every stage

Šteimantas draws on ten years of work at Oxylabs, supplying data to companies training large language models and applying that infrastructure to agent access. He reduces the scraping industry's operating principles to a practical concern: cost matters. Use a browser only when necessary, validate the returned content, and prefer lighter representations. An HTTP 200 response does not establish that the requested page was retrieved successfully, and much of a website's JavaScript, CSS, and HTML adds bytes without helping the agent's task.

The shopping workflow has four stages: discovery, decision, user approval, and execution. Discovery finds product pages. Decision inspects those pages to check stock, price, and whether the description matches the prompt. The user then accepts or rejects the proposed purchase; execution makes the purchase. This separation gives each stage a distinct requirement: finding candidate URLs, gathering evidence, obtaining a decision from the user, or interacting with checkout.

The original workflow sometimes succeeded and sometimes failed. Šteimantas proposes examining it stage by stage, applying scraping principles to improve performance and reduce cost. That framing makes the choice of web-access tool a decision for each stage rather than a single choice imposed on the whole agent.

2:322:35
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

2:32 · section reference included

Replace retailer browsing with compact search results

For discovery, the original agent searched a predefined list of major retailers through browser automation. The browser lacked what Šteimantas calls stealth, so CAPTCHA challenges and denied access interrupted the flow. Retries added time and expense without ensuring access, making the final cost per transaction difficult to predict. The fixed retailer list also limited the agent's selection, while JavaScript-heavy pages made each search more expensive to run.

Location created another failure mode. Items that appeared available during discovery could become unavailable at checkout because the discovery requests did not use geolocation capabilities. Retailers may vary stock, options, and sizes according to the user's location. A product page therefore provides evidence about availability in a particular geographic context, and that context matters to the eventual purchase.

Šteimantas replaces the browser and fixed retailer list with Oxylabs' Fast Search API. He reports compact JSON responses below 2,000 tokens and average response times below 700 milliseconds, alongside high success rates and predictable low pricing. The API exposes results from popular search engines, allowing discovery to use their existing indexes. These are the speaker's reported service characteristics; he does not supply a comparative benchmark or a numerical price.

The agent now formulates multiple search queries and selects relevant URLs from the results. This changes its discovery work from navigating retailer interfaces to evaluating small responses. Šteimantas argues that this stage can run quickly without complicated models because the inputs are compact and the immediate task is URL selection.

5:095:13
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

5:09 · section reference included

A successful response can still contain unusable evidence

Once discovery produces URLs, the decision stage must visit the pages and confirm price, stock, descriptions, and product details. The original implementation ran many browsers in parallel to reduce waiting time. Parallelism itself was reasonable, but access failures left the agent with few usable choices and excluded many popular retailers. The friend's observability was good enough to reveal those failures.

Šteimantas describes a less visible problem among other teams: they check only response size and HTTP status, then send the returned HTML to an LLM. Those checks cannot establish that the body contains product information rather than a CAPTCHA. A model may distinguish the two, but making that distinction consumes tokens before any useful product evaluation begins.

His example attempts ten websites, receives valid content from only three, and sends all ten responses to the model. He calls this 70% wasted tokens. The example establishes that seven of ten responses are unusable; an exact 70% token share would also require those responses to contribute comparable token counts. Its practical point is that retrieval failures can create model costs even when they contribute no evidence to the decision.

His first instinct was to compress the output, but he changes the order of operations: validate content before attempting compression. A smaller blocked page remains unusable. Obtaining valid content gives the agent more options, while excluding invalid responses avoids wasted tokens. He then returns to the browser rule and looks for another way to retrieve the product evidence.

8:058:09
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

8:05 · section reference included

Give product retrieval an explicit success or failure contract

Šteimantas rebuilds product retrieval with the Oxylabs Web Scraper API. He describes a contract in which successful requests return valid content, while CAPTCHA challenges or other blocks produce explicit errors. The application can then omit failed requests from the material sent to the model. He reports high success rates, including on protected websites, but does not quantify those rates or explain the service's content-validation method.

The agent uses a lightweight REST API and can issue hundreds of requests in parallel. Markdown output removes the need to submit raw HTML to the LLM. Browser rendering has not disappeared entirely: when a website is dynamic, the service runs a full browser internally to render its content. The architectural change moves that responsibility behind the retrieval API, so the agent does not have to orchestrate a browser for every product page.

Geolocation options let the application retrieve localized product information. Šteimantas also emphasizes the service's success-based billing: customers pay only for successful results, and failed scraper requests return loud errors without a scraper charge. That combines an operational signal the application can act on with a billing model tied to successful retrieval.

10:2910:31
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

10:29 · section reference included

Keep the browser for approved purchases

With the product information gathered, the system presents its decision to the user. The user makes the final call, and an affirmative response moves the workflow to purchase. Here Šteimantas explicitly retains a browser: checkout requires processing inputs and interacting with highly dynamic content. Both implementations use Playwright MCP with a browser and a large language model.

The original checkout still suffered from access challenges that prevented automation. Šteimantas describes replacing its browser with the Oxylabs headless browser, which supports Playwright MCP and therefore fits the existing integration. He attributes the improvement to stealth implemented at the browser source-code level, an included residential proxy, and geolocation capabilities. The talk names these infrastructure features without detailing their implementation.

For this shopping case, he emphasizes localizing checkout in the same way as product verification. The browser then operates with the same geographic context used to evaluate the item. He describes the resulting flow as selecting the size specified in the prompt, adding the item to the cart, and completing the purchase. This is the reported outcome of the example; no repeated-run checkout success rate is supplied.

11:5411:57
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

11:54 · section reference included

Validate before spending model tokens

Šteimantas closes by connecting web access to implementation time and token cost. His recommendations are to use browsers when their capabilities are necessary, validate content before feeding it to large language models, and supply the infrastructure that lets developers focus on the agent's behavior. The governing constraint remains cost: reliable retrieval and selective browser use are part of making the application economical to operate.

14:0014:03
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

14:00 · section reference included

Read the complete timestamped transcript
  1. 0:01

    [music]

  2. 0:13

    What a beautiful voice.

  3. 0:16

    All right, thank you for coming. Um,

  4. 0:18

    today I'm going to talk a lot about

  5. 0:20

    about missing layer of Aentic AI and

  6. 0:22

    explain a little bit about how web

  7. 0:24

    scraping infrastructure can actually

  8. 0:26

    help you. But first, let me talk uh a

  9. 0:30

    little bit about my friend's idea. So,

  10. 0:32

    my friend had this idea. Uh he built

  11. 0:35

    this AI chatbot that, you know, chatted

  12. 0:38

    with people about their style and it was

  13. 0:40

    supposed to help them pick out new items

  14. 0:44

    uh as you know, some sort of a personal

  15. 0:47

    shopper. And once those items were

  16. 0:49

    picked out, you know, this uh this this

  17. 0:51

    this chatbot would uh produce prompts

  18. 0:55

    that a shopping agent would then take

  19. 0:57

    and attempt to find them online and

  20. 1:00

    purchase them for uh you know for for

  21. 1:02

    for the customers. Um this idea I know

  22. 1:05

    is not new and uh it could be applicable

  23. 1:07

    to many scenarios but my friend was kind

  24. 1:09

    of you know uh he was u he was good at

  25. 1:12

    building agents uh but u he ran into

  26. 1:15

    different problems and asked me for

  27. 1:17

    advice and when he ran it

  28. 1:20

    he he would usually you know instead of

  29. 1:23

    you know product pages or whatever he

  30. 1:25

    would get things like that it's uh you

  31. 1:28

    know he would get captured

  32. 1:30

    you know and uh you know of course you

  33. 1:33

    So he was uh he was doing it very very

  34. 1:35

    quickly. So he wipe coded the whole

  35. 1:36

    thing while having a you know a thought

  36. 1:39

    about you know infrastructure and

  37. 1:40

    underlying layers and how it should

  38. 1:42

    work. I didn't at all. Uh he was using a

  39. 1:46

    browser automation framework for

  40. 1:48

    everything and it was slow,

  41. 1:52

    expensive and unreliable.

  42. 1:55

    So at the end he made a product that uh

  43. 1:58

    uh that does not work and is expensive

  44. 2:01

    to run.

  45. 2:03

    So he asked me for help and you know I

  46. 2:05

    was a little bit reluctant at first

  47. 2:07

    because uh you know I don't like giving

  48. 2:09

    out professional advice you know for

  49. 2:11

    free but uh I took a look at it and uh

  50. 2:15

    you know I got a little curious I have

  51. 2:17

    to be honest. I noticed that he was

  52. 2:20

    missing something.

  53. 2:22

    Um he was missing a layer an

  54. 2:25

    infrastructural layer that would allow

  55. 2:27

    this agent to operate freely on the open

  56. 2:30

    web.

  57. 2:32

    My name is Gedrus. I I work for Oxyabs

  58. 2:35

    uh where in the past 10 years we've

  59. 2:37

    helped you know companies that trained

  60. 2:40

    large language models uh get their data

  61. 2:44

    and now we use this infrastructure to

  62. 2:47

    help AI agents to access uh web on scale

  63. 2:53

    and at low cost.

  64. 2:56

    And uh before we go into this agent and

  65. 2:59

    see how we can build it, I wanted to

  66. 3:01

    talk a little bit about the scraping

  67. 3:02

    industry and how we operate. And uh the

  68. 3:06

    principles that we operate on can be

  69. 3:08

    summed up by one uh sentence. You know,

  70. 3:12

    cost matters.

  71. 3:15

    And the first principle is use a browser

  72. 3:18

    when you absolutely have to

  73. 3:21

    validate content. HTTP response 200 does

  74. 3:25

    not mean that we are good to go.

  75. 3:28

    Lighter content is preferred. Websites

  76. 3:31

    are full of JavaScript, CSS,

  77. 3:34

    HTML, and there's a lot of bites that do

  78. 3:36

    not deliver any value whatsoever.

  79. 3:40

    And today I will demonstrate how these

  80. 3:42

    principles are also applicable when

  81. 3:45

    building agents that interact with the

  82. 3:47

    web.

  83. 3:49

    So coming back to my friend's agent,

  84. 3:51

    right? Let's uh let's take a look and

  85. 3:53

    see how uh we could do a better job and

  86. 3:56

    uh making this agent run more reliably.

  87. 3:58

    So here's how my friends set it all up,

  88. 4:01

    you know? So four different stages.

  89. 4:03

    Discovery, the agent was supposed to

  90. 4:06

    find products pages on websites where

  91. 4:09

    these items can be bought. Then a

  92. 4:11

    decision stage, right? and uh where an

  93. 4:14

    agent can decide uh what products to buy

  94. 4:16

    based on you know uh the the content of

  95. 4:20

    these pages. So the agent has to visit

  96. 4:22

    them verify that the the stock is there

  97. 4:25

    the price is right the the description

  98. 4:28

    fits uh you know the prompt and once

  99. 4:31

    that decision is made user is given with

  100. 4:33

    a choice you know whether to go ahead

  101. 4:36

    with the purchase or you know reject it

  102. 4:39

    altogether. The problem was that

  103. 4:42

    sometimes and of course we go to

  104. 4:44

    execution right away then execution just

  105. 4:47

    making the purchase but the problem was

  106. 4:49

    that sometimes it worked and sometimes

  107. 4:51

    it did not that was a little

  108. 4:53

    problematic.

  109. 4:55

    So let's dissect it step by step and see

  110. 4:58

    how we could build this differently

  111. 5:00

    while improving performance and reducing

  112. 5:02

    the cost dramatically by using the same

  113. 5:05

    principles from the scraping industry.

  114. 5:09

    So the first stage discovery. So my

  115. 5:13

    friend uh you know he chose to go with a

  116. 5:16

    predefined list of websites major

  117. 5:18

    retailers uh and query their search

  118. 5:21

    pages in order to find these products.

  119. 5:23

    He used the browser automation tool for

  120. 5:26

    that. It kind of worked but you know it

  121. 5:28

    did have challenges. So their browser

  122. 5:31

    automation tool lacked what we call

  123. 5:33

    stealth. So they could so they would get

  124. 5:35

    captures and sometimes fail access to

  125. 5:37

    access the sites. all together. This

  126. 5:39

    would break down the flow. So a retry

  127. 5:42

    mechanism would have to be put in place

  128. 5:44

    making the whole process very long. Uh

  129. 5:46

    you know costly um and sometimes the

  130. 5:50

    size would not be uh accessed at all and

  131. 5:54

    also you know as a result also became

  132. 5:57

    very difficult to predict the final cost

  133. 5:59

    per transaction.

  134. 6:01

    The list of websites that my friend was

  135. 6:03

    checking was also deterministic. So

  136. 6:05

    selection of items would only be limited

  137. 6:08

    to the few choices he put in.

  138. 6:12

    Websites themselves were heavy on

  139. 6:13

    JavaScript, making the whole process

  140. 6:15

    very slow and costly.

  141. 6:18

    And finally, even if it worked, items

  142. 6:22

    ended up being unavailable at checkout

  143. 6:25

    because in the discovery phase, the he

  144. 6:28

    was not able to use energy location

  145. 6:30

    capabilities and a lot of e-commerce

  146. 6:32

    websites are uh you know uh they take

  147. 6:36

    your users location into account when

  148. 6:38

    displaying stock options sizes and

  149. 6:40

    soever.

  150. 6:45

    So now we solve these problems at Oxabs

  151. 6:47

    every day. So when scraping you always

  152. 6:50

    want the results to appear on the first

  153. 6:52

    try and to not to use browser unless

  154. 6:55

    absolutely necessary. However, for this

  155. 6:58

    specific discovery phase, you also want

  156. 7:01

    to use to allow your agent to search the

  157. 7:03

    web. Doing so with a browser is very

  158. 7:06

    cumbersome. That is why I chose to use a

  159. 7:09

    product that we built especially for

  160. 7:11

    agents fast search API.

  161. 7:14

    It returns a compact JSON which is less

  162. 7:17

    than 2,000 tokens per response. Has fast

  163. 7:20

    response times less than 700

  164. 7:22

    milliseconds on average. And it's uh has

  165. 7:25

    a a high success rate at a predictable

  166. 7:28

    low price. And most importantly, it

  167. 7:31

    gives your agent access to the mo to you

  168. 7:33

    know to many popular search engines that

  169. 7:37

    all of these websites have been instant

  170. 7:40

    indexed already a long time ago.

  171. 7:42

    So in the discovery phase instead of

  172. 7:44

    predefined list and the browser we give

  173. 7:47

    agent a tool to search the web fast

  174. 7:48

    search API agent formulates fan out

  175. 7:52

    queries and selects the relevant URLs

  176. 7:53

    from search results. Since the responses

  177. 7:56

    are quite small and there's no need for

  178. 7:58

    complicated models we can have the agent

  179. 8:00

    run quite quickly in this stage.

  180. 8:05

    Um, yeah. So, so now the agent has

  181. 8:09

    searched the web and selected some

  182. 8:11

    relevant URLs. It is time for those for

  183. 8:14

    for the agent to visit those pages to

  184. 8:16

    see what they're all about in order to

  185. 8:19

    confirm price, stock level, description,

  186. 8:22

    and product details and so on.

  187. 8:25

    With this, we can go to in the decision

  188. 8:27

    phase. This is where agent selects the

  189. 8:30

    items we will purchase. For this, my

  190. 8:32

    friend also used the browser. He ran

  191. 8:35

    many browsers on parallel so it could uh

  192. 8:37

    you know so the whole process could

  193. 8:39

    happen faster and that is not a bad

  194. 8:41

    thing. He managed to get some results

  195. 8:44

    however many of the results would end up

  196. 8:47

    like this

  197. 8:51

    and the result

  198. 8:53

    the agent would be left with very few

  199. 8:55

    choices with the majority of popular

  200. 8:57

    retailers being left out. It's a good

  201. 9:01

    thing he did well with observability. So

  202. 9:03

    he actually noticed when it happened.

  203. 9:05

    But what we see when working with these

  204. 9:08

    types of customers is that they often

  205. 9:11

    fail to detect the failure. They end up

  206. 9:14

    checking only the content size and HTTP

  207. 9:16

    response code and then feeding this

  208. 9:18

    large HTML to an LLM. Now an a large

  209. 9:22

    language model of course can distinguish

  210. 9:24

    between valid esop content and a

  211. 9:26

    capture. But we need to spend tokens in

  212. 9:29

    order to do that.

  213. 9:30

    And when we attempt to open 10 websites,

  214. 9:33

    but only three return valid content

  215. 9:38

    but feed all of the 10 to the to the

  216. 9:40

    model, it is a problem.

  217. 9:44

    It means that we waste 70% of the tokens

  218. 9:47

    and that is a little crazy in my in my

  219. 9:50

    opinion.

  220. 9:53

    So I noticed this problem as well. Uh my

  221. 9:56

    initial hunch was compression was to

  222. 9:59

    compress the output. But then I thought

  223. 10:01

    wait the problem is not the compression.

  224. 10:04

    The problem is that the content is not

  225. 10:06

    valid. We need to make sure that the

  226. 10:09

    content is valid before even attempting

  227. 10:11

    any compression. This will lead to more

  228. 10:13

    options for the agent to choose from and

  229. 10:16

    fewer wasted tokens. And then I remember

  230. 10:20

    rule number one of scraping. Use the

  231. 10:22

    browser when you absolutely need it.

  232. 10:26

    Otherwise look for other solutions.

  233. 10:29

    So I I tried to rebuild the stage

  234. 10:31

    without a browser and I uh only by using

  235. 10:34

    ox web scraper API and this gave me many

  236. 10:38

    benefits. Uh but firstly only valid

  237. 10:41

    content was returned. In case of

  238. 10:43

    captures or other blocks the request

  239. 10:46

    would fail with an explicit error

  240. 10:47

    message. So I know not to include it

  241. 10:49

    when sending to a large language model.

  242. 10:51

    But the success rates are quite high and

  243. 10:54

    even for protected websites. So that

  244. 10:56

    wasn't that much of you know much of a

  245. 10:58

    problem.

  246. 11:00

    So no browser was needed and uh

  247. 11:02

    everything is a lightweight rest API. I

  248. 11:05

    can run hundreds of requests in parallel

  249. 11:07

    and receive content at the same time.

  250. 11:11

    Also the API supports markdown. So no

  251. 11:14

    need to submit raw HTML uh to LLMs. If a

  252. 11:18

    website is dynamic, it runs a full

  253. 11:20

    browser under the hood to render the

  254. 11:22

    content correctly.

  255. 11:25

    And finally, it supports geoloccation

  256. 11:27

    options. So I can localize my results

  257. 11:30

    and get relevant content.

  258. 11:33

    The best part,

  259. 11:36

    customers only pay for successful

  260. 11:37

    results. So actually, yeah, that's uh

  261. 11:43

    that's what's uh that's what that's what

  262. 11:44

    the best thing about it. No cure or no

  263. 11:46

    pay. If if the scraper fails, there's no

  264. 11:49

    cost and it fails loudly.

  265. 11:54

    So now we have all of the information to

  266. 11:57

    make a decision. We present a decision

  267. 12:00

    to the user and the user makes the final

  268. 12:02

    call. Once it's affirmative, we move to

  269. 12:05

    the last stage of the workflow, the

  270. 12:07

    purchase.

  271. 12:09

    So I remember what I said a couple of

  272. 12:11

    times about browsers. This time, but

  273. 12:14

    this time is different. you this time

  274. 12:16

    you absolutely need to use a browser. We

  275. 12:20

    need to process inputs and the content

  276. 12:22

    is highly dynamic.

  277. 12:24

    Now this time my implementation, my

  278. 12:26

    friend's implementation does not differ

  279. 12:29

    much. We both use playright MCP with a

  280. 12:31

    browser and a large language model.

  281. 12:37

    The main problem my friend faced however

  282. 12:40

    just like in in the previous stages

  283. 12:42

    while using browser was access. Just

  284. 12:46

    like in the beginning as he was using

  285. 12:48

    the browser he was getting captured into

  286. 12:50

    oblivion making it impossible to

  287. 12:52

    automate the flow.

  288. 12:55

    Well the fix was quite easy. I just

  289. 12:58

    connected Oxab's headless browser since

  290. 13:00

    it supports playright MCP is just a drop

  291. 13:03

    in replacement. With this replacement, I

  292. 13:06

    hardened this agent with years of

  293. 13:08

    scraping experience and got proper

  294. 13:11

    stealth done at the browser source code

  295. 13:13

    level, a residential proxy attached to

  296. 13:16

    it out of the box, and most importantly

  297. 13:20

    in this in this case, a geoloccation

  298. 13:22

    capability. So my results are localized

  299. 13:25

    the same way as in the verification

  300. 13:29

    stage.

  301. 13:31

    So if we run it,

  302. 13:33

    we actually have a a a a browser that

  303. 13:38

    that access the content and can actually

  304. 13:41

    automate the flow by, you know,

  305. 13:42

    selecting the right size from the

  306. 13:44

    prompt, add it to cart and complete the

  307. 13:47

    purchase.

  308. 13:49

    And boom,

  309. 13:51

    we have an agent that commands a

  310. 13:54

    powerful infrastructure hardened by

  311. 13:57

    years of web scraping experience.

  312. 14:00

    Not only does it open the up the web,

  313. 14:03

    but also saves the time on

  314. 14:05

    implementation and token cost.

  315. 14:08

    And if I can leave you with a few

  316. 14:10

    lessons we learned today was that you

  317. 14:15

    know when building agents use the same

  318. 14:18

    principles from the scraping industry.

  319. 14:20

    Use the browser when you absolutely need

  320. 14:23

    to.

  321. 14:24

    You have to validate content before

  322. 14:27

    feeding it to the large language models

  323. 14:30

    and most importantly fill the missing

  324. 14:33

    layer with the proper infrastructure so

  325. 14:36

    you can focus on building stuff. But

  326. 14:39

    remember cost matters.

  327. 14:42

    Thank you very much.

  328. 14:44

    [applause]