Rowfill

How to fill a web form from Excel, row by row, without retyping

You have a spreadsheet on one side, the form of an internal tool on the other, and no import button. Here are the three methods that actually work in 2026, what each one costs you, and where each one breaks.

First, check for an import

Before automating the typing, spend five minutes looking for a way around it. Many ERPs and CRMs have a CSV import hidden in an admin menu, or an API your IT team can open. If one exists, use it: an import is faster and safer than any form filler.

The methods below are for the common case where there is no import, or where you are not allowed to use it.

What no longer works: VBA and Internet Explorer

Most tutorials you will find drive Internet Explorer from an Excel macro. Internet Explorer was retired in 2022, and VBA cannot drive Chrome or Edge on its own. The usual bridge, SeleniumBasic, has not been updated since 2016. If you are starting today, skip this route.

Method 1: Power Automate Desktop

Power Automate Desktop is included with Windows 10 and 11. It can read an Excel sheet and type into a web page through its browser extension.

  1. Install Power Automate Desktop and its extension for Edge or Chrome. On a company computer, installation often goes through IT.
  2. Create a desktop flow. Add Launch Excel and Read from Excel worksheet to load your rows into a table variable.
  3. Add Launch new Microsoft Edge (or Chrome) on the form page.
  4. Add a For each loop over the table. Inside it, one Populate text field on web page action per field, Set drop-down list value on web page for lists, then Press button on web page for the save button.
  5. Capture each field as a UI element when the flow asks for it, map it to the right column, and run.

Where it breaks. Each field is captured as a selector. Internal apps often regenerate their field IDs at each release, and the flow stops finding them. It also takes a while to build the first time if you have never used the tool.

Method 2: a short Python script

If you, or a colleague, can run Python, the Playwright library fills a form in about twenty lines. It finds fields by their visible label, which survives most changes of technical IDs.

Install it with pip install playwright then playwright install chromium, save your sheet as CSV UTF-8, adapt the labels and the URL, and run:

import csv
from playwright.sync_api import sync_playwright

# Save the sheet from Excel as "CSV UTF-8 (comma delimited)"
with open("customers.csv", newline="", encoding="utf-8-sig") as f:
    rows = list(csv.DictReader(f))

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://erp.example.com/login")
    input("Log in in the browser window, then press Enter here...")

    for row in rows:
        page.goto("https://erp.example.com/customers/new")
        page.get_by_label("Customer code").fill(row["Customer code"])
        page.get_by_label("Company name").fill(row["Company name"])
        page.get_by_label("Email").fill(row["Email"])
        page.get_by_label("Category").select_option(label=row["Category"])
        page.get_by_role("button", name="Save").click()
        page.wait_for_load_state("networkidle")
        print("done:", row["Customer code"])

    browser.close()

The script opens a real browser window, waits for you to log in, then enters each row. Keep the window visible: you should see what is being typed.

Where it breaks. You need Python on your computer, which is often not allowed on office PCs. And every new form means editing the script.

Method 3: a browser extension

The third way is an extension that records you filling the form once, then repeats it for each pasted row. That is what Rowfill does:

  1. Fill the form once by hand while Rowfill records the fields.
  2. Copy your rows in Excel and paste them in the side panel. Columns are matched to fields by their header.
  3. Check what will be typed for the first row, then start. Live progress, stop button, CSV log at the end.

Nothing leaves your browser: there is no server and no account. Fields are found again by their label when IDs change. It handles one form on one page at a time, and it is free up to 25 rows per run, enough to try it on your real form.

Which one to choose

Power Automate DesktopPython scriptRowfill
InstallApplication and extension, often via ITPython and a libraryBrowser extension
Skills neededBuilding a flowEditing codeCopy and paste
Changing field IDsOften breaksHolds, by labelHolds, by label
Multi-page flowsYesYesNot yet
CostIncluded in WindowsFreeFree up to 25 rows, then paid

If your process spans several screens, or must run unattended, Power Automate or a script is the right tool. If the job is one form and a few hundred rows this afternoon, the extension is the shortest path.

Try it on your own form, with 25 real rows.

Add to Chrome, it's free