Remaking the web for AI.

Read data and take actions. Call a typed function to access any site, no browser needed.

Get started
Install the
for
claude plugin marketplace add bowmark-ai/plugin claude plugin install bowmark@bowmark-ai

Remaking the web for AI.

Read data and take actions. Call a typed function to access any site, no browser needed.

Get started
Install the
for
claude plugin marketplace add bowmark-ai/plugin claude plugin install bowmark@bowmark-ai

The internet wasn’t built for AI

Bowmark converts everything to AI-readable code.

AI accesses the web programmatically.

  1. YouTubeyoutube.com
  2. Amazonamazon.com
  3. Calendlycalendly.com
  4. Google Mapsgoogle.com/maps
  5. Expediaexpedia.com

The internet wasn’t built for AI

  • 28 capabilitiesYouTube
    search()getVideo()getTranscript()listComments()getChannel()createPlaylist()addToPlaylist()getPlaylist()listChapters()getLiveChat()
    + 18 more
  • 4 capabilitiesCalendly
    getAvailability()getEventTypes()getBookingForm()findProfiles()
  • 11 capabilitiesGoogle Maps
    searchPlaces()searchNearby()getPlace()getDirections()listReviews()listPhotos()suggestPlaces()geocodeAddress()reverseGeocode()
    + 2 more
  • 15 capabilitiesAmazon
    searchProducts()getProduct()listReviews()listDeals()listBestSellers()listVariations()listNewReleases()getSeller()
    + 7 more
  • 4 capabilitiesExpedia
    searchHotels()getHotel()getRooms()listReviews()

Bowmark converts everything to AI-readable code.

AI accesses the web programmatically.
agent.ts
import { expedia } from '@bowmark/web';

const stays = await expedia.searchHotels(
  {
    location: 'Kyoto',
    checkIn: '2026-11-13',
    checkOut: '2026-11-16'
  }
);

AI accesses the web programmatically.

agent.ts
import { expedia } from '@bowmark/web';

const stays = await expedia.searchHotels(
  {
    location: 'Kyoto',
    checkIn: '2026-11-13',
    checkOut: '2026-11-16'
  }
);

Running code to find a hotel1s

AI accesses the web programmatically.

agent.ts
import { expedia } from '@bowmark/web';

const stays = await expedia.searchHotels(
  {
    location: 'Kyoto',
    checkIn: '2026-11-13',
    checkOut: '2026-11-16'
  }
);

Found a hotel2s

Hyatt Place Kyoto4.4★(2,345)∙Hotel
Best rate across 14 providers
$184/night

AI accesses the web programmatically.

45 capabilitiesYouTube
search()getVideo()getTranscript()listComments()getChannel()createPlaylist()addToPlaylist()getPlaylist()listChapters()getLiveChat()
+ 35 more
38 capabilitiesCalendly
getAvailability()getEventTypes()getBookingForm()findProfiles()
+ 34 more
18 capabilitiesGoogle Maps
searchPlaces()searchNearby()getPlace()getDirections()listReviews()listPhotos()suggestPlaces()geocodeAddress()reverseGeocode()
+ 9 more
22 capabilitiesAmazon
searchProducts()getProduct()listReviews()listDeals()listBestSellers()listVariations()listNewReleases()getSeller()
+ 14 more
4 capabilitiesExpedia
searchHotels()getHotel()getRooms()listReviews()

Up to 20x cheaper and 5x faster, with no browser needed.

Watch one task done both ways.

Choose a task

Finished run
Finished run
Finished run

Book a hotel

Prompt: “book me a hotel in Kyoto for 3 nights, under $200”.

Bowmark calls searchHotels and bookHotel and answers: Booked ✓ $184/night, Hyatt Place Kyoto · Oct 9 → Oct 12 · free cancellation · Confirmation K4Q7TM. Done — 3 nights at Hyatt Place Kyoto, $184 a night. Replay figures: 1,186 tokens, $0.02, 2.5 seconds.

A browser agent works through 12 steps in a web browser, ending blocked at captcha at “Solving captcha…”. Replay figures: 50,640 tokens, $0.91, 3:56.

BowmarkDone

2.5s
Tokens usedtokens
1,186
Cost
$0.02

Browser agentblocked at captcha

3:56
Tokens usedtokens
50,640
Cost
$0.91

Every capability.
One import.

Typed functions for 100+ popular sites, plus read/write access to any site on the web. These are a sample. Check whether yours is covered.

  • Etsy.search()1 function
  • Best Buy.search()2 functions
    • Best Buy.getProduct()
  • eBay.search()1 function
  • Amazon.searchProducts()14 functions
    • Amazon.getProduct()
    • Amazon.listBestSellers()
    • Amazon.listDeals()
    • Amazon.getDeliveryEstimate()
    +9 more
  • Walmart.search()1 function
  • Target.search()2 functions
    • Target.findStore()
  • Chipotle.getBowlBuilder()1 function
  • Apple.search()25 functions
    • Apple.getProduct()
    • Apple.compareModels()
    • Apple.getPickupAvailability()
    • Apple.getTradeInEstimate()
    +20 more
  • Costco.search()1 function
  • lululemon.search()5 functions
    • lululemon.getProduct()
    • lululemon.getProducts()
    • lululemon.getSimilarProducts()
    • lululemon.getReviews()
  • Abercrombie & Fitch.search()4 functions
    • Abercrombie & Fitch.getProduct()
    • Abercrombie & Fitch.checkStock()
    • Abercrombie & Fitch.findStores()
  • J.Crew.searchProducts()3 functions
    • J.Crew.listCategories()
    • J.Crew.suggestSearchTerms()
  • Newegg.search()3 functions
    • Newegg.getProduct()
    • Newegg.checkStock()
  • Dell.searchForumThreads()1 function
  • Micro Center.search()1 function
  • B&H Photo.search()3 functions
    • B&H Photo.getProduct()
    • B&H Photo.checkStock()
  • Sam's Club.search()8 functions
    • Sam's Club.getProduct()
    • Sam's Club.checkStock()
    • Sam's Club.findClubs()
    • Sam's Club.browseCategory()
    +3 more
  • Poshmark.getBulkUploadTemplateGuide()2 functions
    • Poshmark.getZipFileGuide()
  • Whole Foods.search()1 function
  • Sears.search()2 functions
    • Sears.getProduct()
  • Marriott.findHotels()1 function
  • Expedia.searchHotels()4 functions
    • Expedia.getHotel()
    • Expedia.getRooms()
    • Expedia.listReviews()
  • Google Flights.search()3 functions
    • Google Flights.getBookingOptions()
    • Google Flights.getPriceGraph()
  • Google Maps.searchPlaces()11 functions
    • Google Maps.getDirections()
    • Google Maps.getPlace()
    • Google Maps.listReviews()
    • Google Maps.searchNearby()
    +6 more
  • IHG.search()1 function
  • Avis.searchLocations()2 functions
    • Avis.getLocation()
  • Resy.search()1 function
  • Yelp.search()1 function
  • DoorDash.search()1 function
  • ClassPass.getStudio()2 functions
    • ClassPass.getSchedule()
  • Disney World.getTicketPrice()1 function
  • Six Flags.getTickets()1 function
  • Flightradar24.getAirportArrivals()2 functions
    • Flightradar24.getAirline()
  • American Airlines.getFlightStatus()3 functions
    • American Airlines.retrieveBooking()
    • American Airlines.getBaggageAllowance()
  • Lufthansa.getFlightStatus()2 functions
    • Lufthansa.getBaggageAllowance()
  • Cars.com.search()2 functions
    • Cars.com.getModelResearch()
  • Cheapflights.search()4 functions
    • Cheapflights.getBookingOptions()
    • Cheapflights.searchHotels()
    • Cheapflights.searchCars()
  • Rover.searchBoarding()1 function
  • BC Parks.searchCampgrounds()2 functions
    • BC Parks.checkAvailability()
  • Lonely Planet.search()1 function
  • Airtable.createRecord()6 functions
    • Airtable.getRecord()
    • Airtable.listRecords()
    • Airtable.updateRecord()
    • Airtable.listBases()
    +1 more
  • YouTube.search()28 functions
    • YouTube.getTranscript()
    • YouTube.getVideo()
    • YouTube.getChannel()
    • YouTube.listComments()
    +23 more
  • Twitch.createHighlight()2 functions
    • Twitch.getVideo()
  • GitHub.listCommits()3 functions
    • GitHub.listReleases()
    • GitHub.getProfileReadme()
  • Reddit.search()5 functions
    • Reddit.getPost()
    • Reddit.getSubredditPosts()
    • Reddit.getSubreddit()
    • Reddit.searchSubreddits()
  • LinkedIn.searchJobs()4 functions
    • LinkedIn.getProfile()
    • LinkedIn.getCompany()
    • LinkedIn.getJob()
  • Calendly.getAvailability()4 functions
    • Calendly.getEventTypes()
    • Calendly.getBookingForm()
    • Calendly.findProfiles()
  • Wikipedia.search()1 function
  • Google News.searchNews()10 functions
    • Google News.topStories()
    • Google News.listTopicHeadlines()
    • Google News.listPublisherHeadlines()
    • Google News.getFullCoverage()
    +5 more
  • Google Translate.translate()13 functions
    • Google Translate.detectLanguage()
    • Google Translate.lookupWord()
    • Google Translate.getDefinitions()
    • Google Translate.romanize()
    +8 more
  • Bing.searchNews()2 functions
    • Bing.searchWebBrowser()
  • Cloudflare.comparePlans()2 functions
    • Cloudflare.compareTeamsPlans()
  • Microsoft Azure.getServicePricing()2 functions
    • Microsoft Azure.listServices()
  • npm.getDownloads()1 function
  • Y Combinator.getArticle()2 functions
    • Y Combinator.getBlogPost()
  • SoundCloud.search()3 functions
    • SoundCloud.getTrack()
    • SoundCloud.getPlaylist()
  • Yahoo Finance.getQuote()5 functions
    • Yahoo Finance.searchSymbols()
    • Yahoo Finance.getHistoricalPrices()
    • Yahoo Finance.getTrendingTickers()
    • Yahoo Finance.getMarketSummary()
  • Pinterest.searchPins()1 function
  • Namecheap.getWhois()1 function
  • PayPal.getFees()3 functions
    • PayPal.estimateFee()
    • PayPal.getCurrencyConversionQuote()
  • Amazon.searchProducts()14 functions
    • Amazon.getProduct()
    • Amazon.listBestSellers()
    • Amazon.listDeals()
    • Amazon.getDeliveryEstimate()
    +9 more
  • Airtable.createRecord()6 functions
    • Airtable.getRecord()
    • Airtable.listRecords()
    • Airtable.updateRecord()
    • Airtable.listBases()
    +1 more
  • Google Maps.searchPlaces()11 functions
    • Google Maps.getDirections()
    • Google Maps.getPlace()
    • Google Maps.listReviews()
    • Google Maps.searchNearby()
    +6 more
  • Walmart.search()1 function
  • YouTube.search()28 functions
    • YouTube.getTranscript()
    • YouTube.getVideo()
    • YouTube.getChannel()
    • YouTube.listComments()
    +23 more
  • Google Flights.search()3 functions
    • Google Flights.getBookingOptions()
    • Google Flights.getPriceGraph()
  • Apple.search()25 functions
    • Apple.getProduct()
    • Apple.compareModels()
    • Apple.getPickupAvailability()
    • Apple.getTradeInEstimate()
    +20 more
  • LinkedIn.searchJobs()4 functions
    • LinkedIn.getProfile()
    • LinkedIn.getCompany()
    • LinkedIn.getJob()
  • Calendly.getAvailability()4 functions
    • Calendly.getEventTypes()
    • Calendly.getBookingForm()
    • Calendly.findProfiles()
  • Etsy.search()1 function
  • GitHub.listCommits()3 functions
    • GitHub.listReleases()
    • GitHub.getProfileReadme()
  • Reddit.search()5 functions
    • Reddit.getPost()
    • Reddit.getSubredditPosts()
    • Reddit.getSubreddit()
    • Reddit.searchSubreddits()
  • Amazon.searchProducts()14 functions
    • Amazon.getProduct()
    • Amazon.listBestSellers()
    • Amazon.listDeals()
    • Amazon.getDeliveryEstimate()
    +9 more
  • Airtable.createRecord()6 functions
    • Airtable.getRecord()
    • Airtable.listRecords()
    • Airtable.updateRecord()
    • Airtable.listBases()
    +1 more
  • Google Maps.searchPlaces()11 functions
    • Google Maps.getDirections()
    • Google Maps.getPlace()
    • Google Maps.listReviews()
    • Google Maps.searchNearby()
    +6 more
  • Walmart.search()1 function
  • YouTube.search()28 functions
    • YouTube.getTranscript()
    • YouTube.getVideo()
    • YouTube.getChannel()
    • YouTube.listComments()
    +23 more
  • Google Flights.search()3 functions
    • Google Flights.getBookingOptions()
    • Google Flights.getPriceGraph()
  • Apple.search()25 functions
    • Apple.getProduct()
    • Apple.compareModels()
    • Apple.getPickupAvailability()
    • Apple.getTradeInEstimate()
    +20 more
  • LinkedIn.searchJobs()4 functions
    • LinkedIn.getProfile()
    • LinkedIn.getCompany()
    • LinkedIn.getJob()
  • Calendly.getAvailability()4 functions
    • Calendly.getEventTypes()
    • Calendly.getBookingForm()
    • Calendly.findProfiles()
  • Etsy.search()1 function
  • GitHub.listCommits()3 functions
    • GitHub.listReleases()
    • GitHub.getProfileReadme()
  • Reddit.search()5 functions
    • Reddit.getPost()
    • Reddit.getSubredditPosts()
    • Reddit.getSubreddit()
    • Reddit.searchSubreddits()
Provider group 1 of 3

Install for free

Create an account to start.

Assistants
In your code

Let your agent install it

Works in any agent. It finds its own setup path, asks you only for what a person must do, and remembers to check Bowmark before it touches the web.

Installation guidance

Already created an account? Get your API key. Full setup in the docs.

Need it for a team or enterprise? Book a call.

  1. Crawl. A crawler loads the site thousands of times and works through every feature on it, pulling out the calls behind each one: JS APIs, GraphQL, protobufs and websockets.
  2. Embed. Every captured call becomes a node in a graph database, and calls that work together are joined by edges. Embeddings place similar calls close together, so groups form on their own.
  3. Clean. Some calls belong to no feature: analytics pings, ads and heartbeats. The LLM drops these outliers, so only the real pieces of each feature remain.
  4. Circle. An LLM draws a circle around each group and names the feature it performs: search, add to cart and view product.
  5. Assemble. For each group, the LLM writes one interface and fits its nodes and edges together like puzzle pieces, into a single function.
  6. Run natively. The finished functions load into the Bowmark Library and run natively in Node.js, with no browser at all.

How a website becomes functions

Bowmark for your team.

For teams and enterprises. Bring the sites and workflows your agents need, and leave with a plan.

Talk to the founder

Running agents across a team or inside your own product? Tell us what they need to do on the web and we'll scope it with you.

  1. Sites built for youWe add and maintain the sites your agents depend on.
  2. Your own MCPA branded MCP that puts your product in front of every AI assistant.
  3. Signed-in workAgents act inside the accounts your team already uses.
  4. Pricing for your volumeUsage terms that fit how much your agents run.

Fair questions.

More in the docs, or write to support@bowmark.ai.

Is this a crawler or a scraper?

Not in the way you might expect. Instead of your agent loading and reading pages every time, Bowmark describes what a site can do as typed functions — like searchFlights() or bookHotel() — that return structured results. Your agent calls the function rather than driving a browser.

How is Bowmark different from Firecrawl, Exa or Tavily?

They solve different jobs. Exa and Tavily find information when you don't know where it lives. Firecrawl turns pages you already know into clean text. Bowmark does things on a specific website: search its flights, read a thread with its comments, check stock, or act inside an account you are signed in to.

For open-ended research across sites you don't know yet, or for crawling a whole site into text, use those tools. They are good at it.

Which agents does it work in?

ChatGPT, Claude, Claude Code, Codex, GitHub Copilot and Cursor, plus anything else that speaks MCP. Windsurf works through the generic MCP setup. In your own code you can use the TypeScript or Python client, or HTTP.

Setup for each one is in Connect.

What does it cost?

Free to start, then metered.

Current details are in the docs.

Does it use up my tokens?

Your model still spends tokens on the conversation and on the results it reads. Because a capability returns compact, typed data rather than whole web pages, there is usually far less for it to read than when it works through a browser step by step.

What if the site I want isn’t covered?

Your agent can read any page directly with `bowmark.read.page(url)`, no provider needed. Tell us the site and what you want to do on it at support@bowmark.ai to request a typed provider, which stores logins and speeds up future runs.

Can I use this for my business?

Yes. For business questions, write to support@bowmark.ai.

Can it run on a schedule, unattended?

Yes. Bowmark itself has no scheduler, but you can call it from one using HTTP or an SDK. Connect it to Zapier, Make, a cron job, or your own service to run recipes daily or on any schedule you need.

Full details, with examples for Zapier and Make.