Apartment List~3 min read

Bulk updates took sixteen hours and mostly failed.

Four weeks, one engineer, and an API that the people who needed it could not use.

  • Role: Product design and research
  • Timeline: 4 weeks
  • Team: 1 engineer, me
  • Impact: 4k+ runs, 32k+ hours displaced
  • Platform: Web
0k+

Flow runs

each replacing an 8–16 hour manual job

0k+

Daily updates

0h

Returned to each user’s day

reported by users

Users said they were happy with it, and the time saved was 6 hours of their day. Who measured the 6 hours is not recorded. The run and update figures come from the portfolio deck. Each run stands in for a job that took 8 to 16 hours and nearly always failed at volume, which implies 32,000 to 64,000 hours displaced. That assumes no run re-does a failed one. The 4k+ counts runs, not configured flows. Read at three weeks, against Apartment List’s usual three months. The run and update figures are usage counts, sourced from what users ran on the platform. The actual failure rate on large uploads is not recorded.

Overview

Marketing and operations teams moved property data by hand because the API was too costly or too technical.

A bulk property update took 8 to 16 hours, and nearly all large uploads failed. The API existed but went mostly unused.

Worked with: 1 engineer; 10 property marketing and operations managers in research.

What I owned

I owned

  • Research with 10 property marketing and operations managers, read against failure logs
  • The split-panel structure, chosen over wizard steps and an infinite canvas
  • Three navigation patterns built and tested; two failed
  • The mapping model: raw fields to business entities, then how those entities update

Decided with the engineer

  • What the preview could compute in real time, which set how much of the file it could display
  • Which validation ran client-side and which needed the pipeline

Research

People did not need more speed. They needed to see whether an upload would work.

I interviewed 10 property marketing and operations managers at large property firms, then read the failure logs alongside what they said.

The dangerous outcome is an accepted file. A successful upload that maps the wrong column to the wrong entity puts bad data in front of renters, and nobody notices until someone complains.

Decision: split panel

Steps run down the left and a live preview of the result runs on the right.

I rejected wizard steps, which hid earlier context, and an infinite canvas, which was powerful and visually hostile to newcomers. A fast preview that was subtly wrong would create confidence rather than earn it, so it covers both mapping stages. Errors show where they are introduced.

The Specify Selectors step. The four-step rail sits on the left with the active step outlined; on the right, a live table of the uploaded CSV showing location name, full address, phone number, email, website, latitude and longitude for each row.
The active step on the left, what the file currently becomes on the right. An error shows up where it is introduced rather than at the end of the run.
The Map Fields step. A five-step rail runs down the left: source, file upload settings, specify selectors, split column, map data. Beside it, a table pairs every column header in the uploaded file with the field it maps to, each row carrying its own validation result.
The second mapping stage: every column in the file paired with the field it becomes, and validated row by row. This is where a wrong column would otherwise pass silently.

Decision: navigation

Two prettier navigation patterns lost in testing, and the plainest one shipped.

A timeline and radio cards both looked better. Users read the chrome instead of the configuration. I shipped plain numbered cards with no status icons. Labels such as Source, Crawl, and Specify Selectors read as decisions, so nobody needed to understand the pipeline first. Twice I mistook an interesting element for a helpful one, and testing caught it.

Rejected, marked with a red cross. Titled Timeline, over the verdict: timeline demonstrated a linear progression, but visual elements reduced readability. Beneath it the configuration steps run down a connector line with status dots and expandable section headers.
Rejected, marked with a red cross. Titled Radio Card, over the verdict: cards improved click targets, but excess visual noise continued to reduce clarity. Beneath it each step sits in a bordered card with a radio button and an icon beside its label.
Shipped, marked with a green tick. Titled Taskflow Card, over the verdict: abstracted ETL framework, retained card design, and simplified visual elements. Beneath it each step is a plain numbered card with a bold label and its settings underneath, carrying no status icons and no connector line.

Redesign

Transforms sit inline in the flow, because a modal covered the preview it was explaining.

A transform splits a column, trims whitespace, or maps a field. The overlay held its own copy of the preview, so the same work existed twice and users had to pick which to trust. Inline, a transform is another numbered step.

The cost: a long transform chain makes a long column, and nothing collapses it yet.

Two options side by side. On the left, marked with a red cross, a transform modal sits over the configuration flow with its own settings and preview panes. On the right, marked with a green tick, the same transform runs inline as a numbered card in the sequence, its output columns feeding the table beside it.
The overlay carried a second preview; inline carries none, because the one already on screen is the answer.

Scope

Ingestion, transformation with a real-time preview, and monitoring shipped.

Ingestion covers CRMs, spreadsheets, and third-party portals. Mapping resolves raw fields into business entities, then models determine how those entities update.

The Add New Connector step. Generic sources, including site crawler, push to API, pull from API, function, file upload, and FTP or SFTP, sit above a grid of prebuilt native sources including Salesforce, Sharepoint, Google Drive and Shopify. To the right, the file upload settings and API pull configuration panels.
The first of the three parts: one path in for a CRM, a spreadsheet, or a third-party portal.

Results

Users were happy with the flow and got 6 hours of their day back, across over 4,000 runs.

Nobody challenged the split panel, so it was never stress-tested

Users caught the navigation failures, but I cannot show anyone disagreeing with the central structure. It probably deserved the same scrutiny and never got it.

Sam Cusano