Where does Rowmate live? In your menu bar. Look for the small spreadsheet-with-a-smile icon at the top right of your screen, next to the clock and Wi-Fi symbols. Click it to open the Rowmate panel.
How do I open a CSV file? Drop the file onto the Rowmate panel, or click the file picker inside the panel and choose one. Rowmate auto-detects the encoding and delimiter for you.
How do I run an operation? Once a file is loaded, pick what you want to do (Deduplicate, Find & Replace, and so on), set up the options in the panel, and click Process. Rowmate writes the result as a new file next to your original.
What does "Process another" do after a run finishes? It returns the panel to the idle drop zone without closing it, so you can immediately drop another file (or files) and run the same setup again.
Can Rowmate start automatically when I log in? Yes. Toggle "Launch Rowmate at login" in Settings > General. macOS will register the app with System Settings > General > Login Items.
Will Rowmate overwrite my original file? Never. Rowmate always writes the result to a new file next to the original. Your source data is never modified.
Where does the output go? By default, into the same folder as the input file, with a suffix appended to the filename (for example, contacts.csv becomes contacts-deduped.csv).
Can I always save to a specific folder instead of next to the original? Yes. In Settings > General > Output, switch the output location to "A specific folder" and pick the folder once. From then on every processed file lands there. The other modes are "Same folder as the source file" (default) and "Ask me each time".
Can the result file open in Finder automatically when processing finishes? Yes. "Show result file in Finder after processing" in Settings > General > Output is on by default. Turn it off if you'd rather just see Rowmate's own result view.
Can I undo an operation? Because the original is untouched, you can always go back: just delete the new output file and re-run with different settings.
What file types does Rowmate support? Comma-separated (.csv), tab-separated (.tsv), and semicolon-separated text files. Quoted multiline cells, escaped quotes, and BOM markers are all handled.
How does Rowmate handle different CSV formats? Rowmate figures out automatically what kind of CSV your file is (comma, tab, or semicolon) and what character set it uses. You don't have to set anything. The output is always saved in UTF-8, which works in Excel, Google Sheets, and pretty much everywhere else.
My file looks garbled after Rowmate opens it. Garbled characters usually mean the file was saved by an older system using a different character set. The easiest fix is to open the file in Numbers, save it again as CSV, and reopen it in Rowmate. The re-saved copy will read correctly.
My accented characters look wrong when I open the result in Excel. That's an Excel quirk. Rowmate normally adds a small marker to the file that tells Excel to read the accented characters correctly, but if you've turned it off you can re-enable "Include UTF-8 BOM by default" in Settings > General > Output.
My phone numbers show as #NAME? when I open the CSV in Google Sheets. Spreadsheets treat any cell that starts with =, +, -, or @ as a formula, so a phone number like +14155550100 shows up as an error. Rowmate has a setting for this in Settings > General: "Protect cells from spreadsheet formula injection". Turn it on if you're opening the file in Excel or Google Sheets. Leave it off if the file is going to another program, since the protection adds a small invisible character that some programs read as part of the data.
How do I merge two files? The main screen has a dedicated Merge two files drop zone. Drop one or both files there (you can drop them together, or drop the first now and the second later). Then pick the join mode (Append, Inner, Left, or Only in First), choose which column to match on, and Rowmate will combine the rows.
Does it matter which file is primary and which is secondary? For Append and Inner Join, the order only affects how rows and columns are arranged in the output; the same rows survive either way. For Left Join and Only in First, order matters: both modes are anchored to the primary file. Left Join keeps every primary row and attaches matching secondary columns. Only in First keeps primary rows that have NO match in the secondary. If a column exists in both files and a row matches in Left Join, the primary file's value wins.
What's the difference between Append and Join when merging? Append stacks the rows of the second file under the first, aligning by column name. Useful for combining exports of the same shape from two months. Join matches rows by a key column you choose. There are three join flavors: Inner keeps only rows that exist in both files, Left keeps every row from the first file (with matching columns from the second attached), and Only in First keeps just the rows from the first file that don't appear in the second.
When would I use "Only in First"? Whenever you want to compare two lists and find what's unique to the first one. Common cases: "which prospects haven't I emailed yet?" (drop full prospect list as the first file, the already-emailed list as the second), "which leads aren't in the new CRM yet?", "which invoices haven't been paid?" The output is the first file's columns only, with no extras pulled from the second, since by definition there's no match. The output filename ends in _only_in_first.csv so it's self-describing.
What's a "key column" and how do I pick one? A key column is the shared column Rowmate uses to figure out which rows in the first file belong with which rows in the second file. It's most often email or LinkedIn URL, but it can be anything that uniquely identifies the same person or company in both files (a customer ID, phone number, even a company name).
How does Rowmate pick the column to match on for a Join? When you're in Join mode, the Key column dropdown shows three sections:
field.prospect id ↔ prospect ID, or email ↔ email2). Picking one tells Rowmate to treat them as the same column for the join.How does deduplication decide what's a duplicate? Rowmate compares the columns you select. By default it matches exact values, with smart matching for emails and LinkedIn URLs (so [email protected] and [email protected] are recognised as the same person). For looser matching, turn on the Treat near-matches as duplicates checkbox. With it on, Rowmate also ignores extra spaces, casing, accents, punctuation, and word order, so Alice Smith, Smith, Alice, and Café Solo / Cafe Solo are all matched. It's off by default to avoid surprises on small lists.
What does Trim whitespace do? It removes stray spaces (and tabs) at the beginning and end of every cell. Spaces between words inside a cell are left alone — Acme Corp stays Acme Corp, and John Smith stays John Smith. Only the leading and trailing whitespace gets trimmed, so multi-word names and company names are safe.
What does Mask Columns do? It hides the contents of any column you choose. Three options: blank it out completely, show only part of the value (like j***@gmail.com), or replace it with a scrambled code that's the same every time the same value comes through. Useful before sharing a CSV with someone who shouldn't see emails, phone numbers, or names.
What does Normalize do? Normalize rewrites a column to a chosen format. The options are:
$1,299.99 becomes 129999.How does Normalize > LinkedIn URL work? Sales lists and CRM exports often have LinkedIn URLs full of tracking junk and country prefixes (like de.linkedin.com). Run Normalize > LinkedIn URL on the column and Rowmate cleans them up, leaving a tidy https://linkedin.com/in/handle for every row.
Does it work on company pages too? Yes. Company pages, showcase pages, and school pages all get cleaned the same way as profile URLs. Tracking parameters and trailing extras (/life, /jobs, /about, /posts) are stripped, so two rows pointing at different views of the same company end up identical.
Will it touch Sales Navigator or Recruiter URLs? No, on purpose. Those URLs use special internal codes that change meaning if you change the casing or trim them, so Rowmate leaves them exactly as you wrote them. Cells that aren't LinkedIn URLs at all (empty, plain text, GitHub URLs) are also left alone.
What about LinkedIn URLs in Deduplicate or Merge? Even without running Normalize first, Rowmate cleans up LinkedIn URLs automatically and collapses two visually different URLs that point to the same profile into one match. It recognises a LinkedIn column two ways:
This automatic matching only affects the comparison; if you want the cell value itself rewritten in the output, run Normalize > LinkedIn URL.
How smart is Title Case for names? Smarter than the spreadsheet built-in. Mc/Mac surnames are handled (mcdonald → McDonald), and small connecting words in continental names (de, la, du, van, von, da, dos) stay lowercase when they're in the middle of a name. So maria de la rosa becomes Maria de la Rosa, not Maria De La Rosa.
What's a preset? A saved set of steps. If you do the same routine on every monthly export (deduplicate, normalize emails, mask names), you can save those steps as a preset and re-run them on any new file with one click.
How do I save one? After configuring an operation (or a chain of them), click "Save current as preset…" and give it a name. It will appear in the panel's preset picker.
How do I make a preset apply automatically when I drop a file? The main panel has two sections, Clean & Transform and Merge two files, and each has its own preset picker. Select a preset there and it sticks: drop files into that section and Rowmate processes them automatically. Set the picker to "None" to go back to picking operations manually each time.
Do the selected presets survive an app restart? Yes. Whatever you have selected in each picker is remembered and re-applied when you open Rowmate next time.
Can I have a Clean preset and a Merge preset selected at the same time? Yes, they're independent. The Clean & Transform picker only shows clean/transform presets, and the Merge picker only shows merge presets, so they don't conflict.
Where are presets stored? Locally on your Mac, in a private folder Rowmate manages itself. They're never sent anywhere.
Can I process several files at once? Yes. Drop multiple files into the panel, pick a preset, and Rowmate will run it on every file. Each file gets its own output, written next to the original.
What happens if one file fails? Rowmate continues with the rest and shows you a summary at the end listing which files succeeded and which had problems.
Does Rowmate send my files anywhere? No. Rowmate runs entirely on your Mac and makes no network requests. Your files are never uploaded, copied, or transmitted. See the full privacy policy for details.
Does Rowmate track me? No. Rowmate doesn't track anything. No analytics, no usage reports, no behind-the-scenes data sent anywhere.
The app feels slow on a really big file. Rowmate is built for everyday spreadsheets and loads the whole file before processing it. Files up to a few hundred megabytes work fine; multi-gigabyte files aren't supported in this version. Once a file is loaded, individual operations run quickly.
The Rowmate icon disappeared from my menu bar. macOS sometimes hides menu-bar icons when there's no room. Quit and relaunch Rowmate, or check System Settings > Control Center to see if the icon was moved.
Drag and drop isn't working. Make sure you're dropping the file directly onto the Rowmate panel, not the menu bar icon. If the panel isn't open, click the icon first.
Rowmate won't open a file from a particular folder. For privacy reasons, macOS asks Rowmate to request permission for each new folder you open files from. The first time you open a file from a new location, macOS may show a permission prompt — click Allow. If you previously denied it, you can grant access again in System Settings > Privacy & Security.
I want to start fresh. To wipe Rowmate's saved settings and presets and start over: quit Rowmate, then open Finder, press Cmd+Shift+G, and paste in ~/Library/Containers/dev.oitoana.Rowmate. Drag that folder to the Trash. The next time you open Rowmate, it'll be a fresh install with default settings.
Found a bug, hit a strange edge case, or have an idea? I'd love to hear it. Please reach out via the contact page.
If you're reporting a bug, the most useful things to include are: