Updated November 2026 · Written and maintained by the Progression Agency strategy team
The pull request is titled add_comp_feed, and it pulls occupancy numbers from four other buildings on the block into a pricing page. A software company in San Francisco should stop it at the title, because the city’s Ordinance 224-24 makes it unlawful to sell, license or use a tool that recommends rents using non-public competitor data for homes here. This page reviews one pull request comment by comment, then says what a rebuilt tool costs. Progression is based in New York, works with Bay Area property teams remotely, and offers on-site sessions on request.
On this page · 11 sections
- add_comp_feed
- A software company in San Francisco starts with the ban on sale
- Comment 1: the data origin field
- Comment 2: the word recommends
- Comment 3: who is the customer
- Comment 4: occupancy is in scope too
- What can ship
- The penalty paragraph, in plain words
- A review checklist for your engineering lead
- What does rebuilding a pricing tool cost?
- Related services and guides
Outside the niche A Mission District retailer pricing on its own sales history faces none of this; the habit of writing down where every input comes from still applies, and our custom software development page covers the rest.
The pull request card is an illustrative example and not a real company’s code. The ordinance is stated as passed by the Board of Supervisors in September 2024; how it applies to your facts is a question for counsel. Nothing here is legal advice, and no vendor, landlord or product is named.
add_comp_feed
The pull request lands in the review queue on a Tuesday. It adds a feed, a function that averages what four nearby buildings report and a column on the pricing screen labeled suggested. The author has written a good description and the tests pass.
| File | What it does | What the reviewer asks |
|---|---|---|
| feeds/comp_feed.py | Pulls occupancy and asking rent from four nearby buildings | Where does the data come from, and who may see it? |
| pricing/suggest.py | Averages the feed and returns a number | Is this setting, recommending or advising? |
| ui/pricing_screen.py | Shows the number in a column labeled suggested | Who is the user, and where are the units? |
The code is clean and the comment thread is where this one is decided. Each question in the review ties to one sentence of the city’s ordinance, and the rest of this page takes them in order.
A software company in San Francisco starts with the ban on sale
Ordinance 224-24, with the file number 240766, adds Section 37.10C to Chapter 37 of the San Francisco Administrative Code. The text of the ordinance has two prohibitions. The first is on sale: it is unlawful to sell, license or otherwise provide to San Francisco landlords any algorithmic device that sets, recommends or advises on rents or occupancy levels that may be achieved for residential dwelling units in the city.
The second is on use. It is unlawful for a landlord to use such a device when setting rents or occupancy levels for residential units in San Francisco. A vendor and a landlord each have a duty of their own, and the pull request touches both.
In September 2024, Local News Matters reported that the Board of Supervisors had approved the ordinance and that its president described San Francisco as the first city in America to pass such a law. Whatever the ordinance’s reach turns out to be in practice, the text is plain about what a team should not ship.
| Prohibition | Who it applies to | What it covers |
|---|---|---|
| On sale | Anyone who sells, licenses or otherwise provides a tool | A tool that sets, recommends or advises on rents or occupancy levels for homes in San Francisco, supplied to San Francisco landlords |
| On use | A landlord | Using such a tool when setting rents or occupancy levels for homes in San Francisco |
Comment 1: the data origin field
The first comment asks for one field the code does not have: where each input comes from. The ordinance defines an algorithmic device by what it does with non-public competitor data. That data means information that is not available to the general public, including actual rent prices, occupancy rates, lease start and end dates and similar data.
The definition goes on to say it applies whether or not the information is attributed to a specific competitor, and whether or not it is anonymized. It also applies whether or not the data comes from another person competing in the same market or a related market. So an average of four buildings’ occupancy is not safe because the buildings are unnamed.
- Add an origin field to every input: public, your own, or from someone else.
- Record the source name, the date and the person who approved it.
- Mark any input from another landlord or a pool of landlords as not public until counsel says otherwise.
- Treat anonymized and aggregated data from competitors the same way as named data.
- Send edge cases, such as a public listing site, to counsel.
What counts as public?
The ordinance uses the phrase not available to the general public, and says no more than that. A figure anyone can look up without an account is a different thing from a figure that comes through a feed. Where the line sits for a given source is a question for counsel.
Comment 2: the word recommends
The second comment is about a column header. The sale prohibition covers a device that sets, recommends or advises, and the definition describes a tool that advises a landlord on whether to leave a unit vacant or on the amount of rent the landlord may obtain.
A screen that fills in the rent field sets a rent. A screen that shows a suggested number beside it recommends one. A screen that shows a range labeled typical advises on one. Moving the number to a tooltip or a side panel does not change the verb.
- Read every label on the screen as if it were a sentence in the ordinance.
- Look for the words suggested, optimal, target, recommended, benchmark and range.
- Check export files and email alerts, not just the main screen.
- Ask counsel about any feature that shows a number derived from competitor data.
Does a hidden score count?
A score that never appears on a screen but drives an alert, a sort order or a default still advises. The test is what the tool tells the landlord to do, not where the number is displayed.
Comment 3: who is the customer
The third comment asks who will use the tool. The sale prohibition covers selling, licensing or otherwise providing the device to San Francisco landlords. The use prohibition covers the landlord.
A vendor’s terms and a landlord’s duty are separate, and a contract clause that makes one party responsible does not remove the other’s. Both are named in the text, and a team that builds for property managers should read both.
| Question | Vendor | Landlord |
|---|---|---|
| What is unlawful? | To sell, license or otherwise provide the tool to San Francisco landlords | To use the tool when setting rents or occupancy levels for San Francisco homes |
| What counts as another violation? | Ask counsel | Each separate month a violation continues and each separate unit is a separate and distinct violation |
| Who can bring a civil action? | The City Attorney | The City Attorney, and a tenant |
- Write down who the customer is for each deployment of the tool.
- Keep a list of which units are in San Francisco.
- Read your contract terms for who bears the duty, and do not treat them as a shield.
- Ask counsel before you onboard a new landlord.
What if the customer is outside the city?
The sale prohibition is about San Francisco landlords and homes in San Francisco. A customer with units both inside and outside the city is the kind of case to take to counsel, with a list of which units are where.
Comment 4: occupancy is in scope too
The fourth comment is on a small field called target vacancy. The ordinance covers rents and occupancy levels, and the definition includes advising a landlord on whether to leave a unit vacant.
A vacancy target screen, a lease-up pace chart that tells the landlord how many units to hold back or a renewal screen that suggests when to let a unit sit may all fall inside the same words. A tool that only reports what already happened is a different thing; ask counsel where the line sits.
- List every field that mentions vacancy, occupancy, holdback or lease-up.
- Check whether the field reads competitor data or the landlord’s own.
- Remove any recommendation that rests on competitor data.
- Keep reports that describe the landlord’s own units.
Before the author replies, the thread should hold four answers and a note to counsel.
What can ship
The ordinance states that it is not intended to prevent the development or sale of software that helps landlords manage their units generally, or through the use of public data. It also says it does not regulate the amount of rent a landlord may charge.
The cards sort the work into what a team can usually keep and where to stop. The ordinance’s definition also lists two exclusions: a product used to set rent or income limits under affordable housing program guidelines of a government, and a trade association report that publishes aggregated existing rental data without recommending rents or occupancy levels for future leases. Whether either fits your product is for counsel.
Can a team rewrite the feature?
Often, yes. Custom software development in San Francisco for a property manager can keep the screen and change what feeds it: the manager’s own rent roll, public data and rules a person sets. Counsel reviews the new inputs before the feature goes back on.
Holding a pricing screen with a feed you cannot explain?Send us the pricing screen and where each number comes from. You get a free proposal from a software company in San Francisco with the inputs sorted.
The penalty paragraph, in plain words
The City Attorney may file a civil action over a violation of either prohibition, for damages, injunctive relief, restitution or return of illegal profits, and civil penalties of up to $1,000 per violation. The court shall award reasonable attorney’s fees and costs to the City Attorney if the City Attorney prevails.
A tenant may file a civil action for violations of the use prohibition, seeking injunctive relief, money damages and civil penalties of up to $1,000 per violation, with reasonable attorney’s fees and costs for a prevailing tenant. For the use prohibition, each separate month and each separate unit counts as its own violation. We state no amounts beyond what the ordinance says.
- Keep a record of which months a tool was in use and for which units.
- Turn a feature off first and investigate second.
- Do not delete logs while a question is open; ask counsel what to keep.
- Tell your counsel about every feed that comes from outside your own portfolio.
Who answers a status question?
Whether a tool is covered, whether a source is public and whether a feature can go back on are questions for counsel. Progression builds software, and it does not give legal advice.
- Name one person who owns each input’s source.
- Make the origin field required in the data model.
- Add the checklist to the pull request template.
- Give counsel a standing slot in the release review.
A review checklist for your engineering lead
Copy this card into your review template. It turns the four comments into a list that a lead can check before a rent tool ships or a feed is switched on.
Send the filled card with the pricing screen. Our custom software development page describes how a build proceeds. For the marketing side of a property business, see our marketing page for San Francisco.
What does rebuilding a pricing tool cost?
The cost depends on how much of the tool survives. Taking one feed out is a small change. Rebuilding the inputs so a landlord’s own data feeds a screen is a larger project. Progression quotes after a written scope.
| What is quoted | Published US band | Fits |
|---|---|---|
| Internal tool or integration | $30,000 to $100,000 | Taking a feed out and rewiring a screen to your own data |
| Portal or platform | $75,000 to $400,000 | A rebuilt pricing and reporting platform across a portfolio |
| SaaS MVP | $30,000 to $150,000 | A new product built on public data and a manager’s own numbers |
| US agency or contract rate | $100 to $200 an hour | Reviews, fixes and additions after the first build |
Hosting, licenses and security testing are on top of these bands. We list no San Francisco premium and no price per unit managed.
Related services and guides
Pages that sit beside this pull request:
Get a free proposal
Send us the pricing screen and where each number comes from. You get a free proposal from a software company in San Francisco with the inputs sorted.
Getting found in search
AI, AEO and what is changing
Paid media and lead generation
Websites and design
Choosing and working with an agency
Software and app development
Website design by industry and type
Web development, platforms and hosting
Social, content and brand
By industry and by situation
Frequently asked questions
What should a software company in San Francisco do before building a rent tool?
Does a software development company in San Francisco have to care if the landlord is the one using it?
When does custom software development in San Francisco help property managers?
Does San Francisco ban rent software outright?
Can I use my own building’s history?
Does this cover occupancy targets?
Who can bring a court case under the ordinance?
What penalty can a court impose for each violation?
What does the ordinance leave alone?
What does rebuilding a pricing tool cost?
Is your team in San Francisco?
What does non-public competitor data mean?
Does anonymizing the data fix the problem?
Is a suggested rent column covered?
How does the ordinance count violations for landlords?
How soon after passage did the ordinance take force?
Can a trade association report be used?
Can your team tell us whether our feature is covered?
Should we pause the feature while we decide?
What should we hand over with the pricing screen?
Holding a pricing screen with a feed you cannot explain?Send us the pricing screen and where each number comes from. You get a free proposal from a software company in San Francisco with the inputs sorted.
Get a free marketing proposal
Tell us what you are trying to grow and we will come back with a plan, not a pitch deck. Same-day reply on weekdays.
