Liking cljdoc? Tell your friends :D

flex-office-data

Open data on flexible office prices — flex desks, fixed desks, private offices, day passes and meeting rooms — city by city, from the CoworkingView Price Index. One call returns a tidy table you can analyse, chart or join with your own data.

LanguagePackageInstall
Pythoncoworkingviewpip install coworkingview · conda install -c conda-forge coworkingview
Rcoworkingviewinstall.packages("coworkingview")
JavacoworkingviewMaven Central io.github.coworkingview:coworkingview
RubycoworkingviewBuild from integrations/ruby (not on RubyGems)
OCamlcoworkingviewopam install coworkingview
SwiftCoworkingViewSwift Package Manager · CocoaPods pod 'CoworkingView'
Dcoworkingviewdub add coworkingview
Command linecwv (Rust)cargo install coworkingview · docker run --rm coworkingview/cwv · AUR · Chocolatey · Snap

LibreOffice Calc uses the same public API as spreadsheet functions (CWV_SPACES, CWV_PRICE, and the others in that README).

Backstage (@coworkingview/backstage-plugin-coworkingview) shows the same prices and spaces on a portal page.

Nuxt (@coworkingview/nuxt) auto-imports useCoworkingProperties and useCoworkingRates for the same two endpoints.

Thunderbird adds a “CoworkingView prices” button to the message and compose windows and looks up the same Price Index.

Joomla (mod_coworkingview, CoworkingView Workspace Prices) shows the same Price Index on a site page. That module is GPL-2.0-or-later.

LM Studio (coworkingview/coworkingview-workspace-prices) gives a local model tools for the same prices and a short catalogue search. That plugin is published with lms push.

Eclipse (com.coworkingview.eclipse.feature) adds a view, CoworkingView Workspace Prices, for the same Price Index. Install it from the p2 update site. The plug-in code is MIT.

XWiki (com.coworkingview:coworkingview-macro, CoworkingView Prices) is a wiki macro, {{coworkingview city="berlin"/}}, for the same Price Index. The macro code is MIT.

Redmine (redmine_coworkingview, CoworkingView Prices) adds the wiki macros {{coworking_rate(berlin)}} and {{coworking_rates(berlin)}} for the same Price Index. The plugin code is MIT.

PostgreSQL (coworkingview) installs a snapshot of the same Price Index with CREATE EXTENSION coworkingview. The extension is pure SQL, MIT, and packaged for PGXN.

The Python, R, Java, Ruby and command-line packages read the same public API, follow the same specification and are tested against the same fixtures and expected outputs, so a number is the same whichever of those tools you use. The OCaml, Swift and D packages are typed clients for the Price Index and catalogue search on that API, tested against the recorded API fixtures.

Why

Flexible workspace is priced in thousands of operator pages, in different currencies, units and formats. Analysts, proptech teams, journalists and companies choosing where to open an office end up copying prices by hand. This kit gives you the medians and spreads behind the Price Index directly — with the sample size next to every figure, so you know how much to trust it.

Quickstart

Python

import coworkingview as cwv

rates = cwv.rates(city="berlin")
rates[["product", "unit", "median", "p25", "p75", "sample_size"]]
#           product   unit  median    p25    p75  sample_size
# 0       flex_desk  month   214.0  199.0  292.0           72
# 1        fix_desk  month   310.0  290.0  421.0           60
# 2  private_office  month   480.0  399.0  550.0           59
# 3        day_pass    day    35.0   <NA>   <NA>           59
# 4    meeting_room   hour    32.0   <NA>   <NA>           79

R

library(coworkingview)
rates <- cwv_rates(country = "germany")
subset(rates, product == "private_office", c(city_name, median, sample_size))

Java

import io.github.coworkingview.Client;
import io.github.coworkingview.RatesQuery;

Client client = Client.create();
client.rates(new RatesQuery().city("berlin"));

Ruby

require "coworkingview"

client = CoworkingView::Client.new
berlin = client.rates(city: "berlin")
puts berlin.attribution

OCaml

let client = Coworkingview.make () in
Coworkingview.market_rates client ~city:"berlin" ()

Swift

import CoworkingView

let client = try Client()
let berlin = try await client.rates(city: "berlin")
print(berlin.attribution ?? "")

D

import coworkingview;

auto client = new Client();
auto berlin = client.rates(city: "berlin");
// Print berlin.attribution next to any figure you republish.

Command line

$ cwv rates --city berlin
$ cwv spaces --city madrid --product meeting_room --format csv > meeting-rooms.csv

What's in the data

FunctionOne row perHighlights
rates()city × productmedian, 25th/75th percentile, sample size, low_confidence flag
cities()cityentry price (cheapest monthly option per space), coverage
spaces()spacesearch the catalogue by city, product (incl. event spaces, virtual offices, meeting rooms), capacity, price — with a link to each listing
space(slug)spaceevery published price option of one space

Products: flex_desk, fix_desk (dedicated desk), private_office, exclusive_bereich (exclusive area), day_pass, meeting_room, event_space, virtual_office, membership. New aggregates published by the Price Index appear in rates() without a package update.

Licence and attribution

  • Code: MIT (each package's LICENSE). The Joomla module in integrations/joomla/ is GPL-2.0-or-later, the licence the Joomla Extensions Directory requires for a listing.
  • Price Index data (rates(), cities()): CC BY 4.0. Credit CoworkingView Price Index with a link to https://coworkingview.com/en/tools/price-index. Every result carries the exact attribution text (df.attrs["attribution"] in Python, attr(x, "attribution") in R, stderr in the CLI).
  • Catalogue (spaces(), space()): names, prices and links are for search and reference. Descriptions, photos and logos belong to the operators and are not included. The packages cap a search at 200 results; please don't use them to copy the catalogue.

Data source and freshness

Figures come from the operator-published prices of the spaces listed on CoworkingView, normalised to a monthly price per desk (monthly products), per day (day pass) or per hour (meeting rooms). The API recomputes them as listings change; as_of on every row says when. Cities below the publication threshold are listed by cities() with published = false and no figures.

Browse offices

Repository layout

spec/               SPEC.md, API fixtures, golden outputs (the contract all packages share)
python/             coworkingview on PyPI / conda-forge
r/                  coworkingview on CRAN
rust/               cwv CLI and the coworkingview crate (crates.io, Docker)
integrations/java/  coworkingview on Maven Central
clients/ocaml/      coworkingview OCaml client (opam)
clients/swift/      CoworkingView Swift package (Swift Package Index, CocoaPods)
clients/d/          coworkingview D client (code.dlang.org)
integrations/matomo/CoworkingView/  Matomo 5 dashboard widget
integrations/libreoffice/  Calc add-in (CWV_SPACES, CWV_PRICE)
integrations/backstage/  Backstage frontend plugin
integrations/nuxt/  `@coworkingview/nuxt` module (`useCoworkingProperties`, `useCoworkingRates`)
integrations/thunderbird/  Thunderbird MailExtension (CoworkingView prices)
integrations/joomla/   Joomla 4/5 site module (CoworkingView Workspace Prices)
integrations/lmstudio/  LM Studio tools-provider plugin (coworkingview-workspace-prices)
integrations/eclipse/  Eclipse view (CoworkingView Workspace Prices) and p2 update site
integrations/postgres/  coworkingview extension for PostgreSQL (PGXN)
integrations/redmine/redmine_coworkingview/  Redmine wiki macros (CoworkingView Prices)
packaging/          AUR, Chocolatey and Snap manifests for cwv

Contributing

Issues and pull requests are welcome — see CONTRIBUTING.md. Found a wrong price? Report it on the space's page at coworkingview.com so it is fixed at the source.

Maintained by CoworkingView, the coworking and flexible office comparison platform for Europe and the UAE.

Can you improve this documentation? These fine people already did:
E. M., CoworkingView & Cursor Agent
Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close