Skip to content
Pine Computer Request access
Menu

01 / 26 Work on sites with no API · Example

Renew permits

Your customer clicks Renew once, and every permit due this quarter is renewed on its own city’s portal.

Who it’s for
Property-management software whose customers still renew rental permits city by city, by hand.
Why it’s hard
No city portal has an API, and no two forms ask for the same things. The login is your customer’s, so they have to sign in themselves.
You get back
  • The city’s receipt, as a PDF on each permit’s row
  • Any permit a portal refused, with the portal’s message
A real run: New York City’s payment portal turns away a computer in Singapore and answers one in the United States, and the quarterly property tax bill comes back as a PDF. Cookbook 06: Computer in a new country
How it runs, in your product’s code

Your product starts a computer for each city, and they run side by side. Each one opens the portal, finds the permit and fills in the renewal from the sheet. If a portal wants a login, the permit’s row turns to “Needs you: sign-in”; your customer signs in on the screen under the list and hands it back. The receipt is saved as a PDF, and its permit number is matched to the sheet before the row says Renewed.

Ruby · example
computer = pine.create_computer(  location: { country: "US" },  ephemeral: true)session = computer.create_session(name: "main", browser: true) session.agent.run(<<~JOB)  Renew the rental permits on this sheet that expire this  quarter, and save each receipt as a PDF.JOB session.agent.events do |event|  case event.type  when "needs_input"    # Your user takes the controls on the live desktop in your    # product, does what only they can, and hands them back.    session.agent.answer(event.payload["request_id"], "Done.")  when "result"    session.list_artifacts(turn_id: event.turn_id).each do |file|      row.attach(file.filename, session.read_artifact(file.id))    end    break if event.terminal?  endend computer.stop

Build more.
Hand AI the work.

Pine Computer is invite-only while in beta.