continuous-integration/drone/push Build is failing Details
Please note: This project is in an alpha stage and many things are subject to change. But we are getting there. Expect a workable beta-stage prototype towards the end of Q2 2023.
What is TEDective?
tl;dr TEDective helps you find out who buys what from whom in the EU.
Despite a range of previous efforts to parse and analyse TED data, there currently exists no offering that fulfils all of the following requirements with regards to the provision of TED data:
- It is built and published under a free software license.
- It offers a current, cleaned and deduplicated version of TED data.
- Data is available as OCDS-compliant JSON, both as bulk downloads and via a capable and well-documented API.
Sustainably providing long-term access to European tender data in a way that fulfils these three requirements enables numerous applications that might be of interest to civil society, business and government which could greatly enhance the transparency and accountability of European business activity. There are a range of interesting questions that can be answered with this data if it was available in a well-documented and easy-to-understand format that is interoperable with tender data published elsewhere.
TED XML notices are downloaded and parsed
into PostgreSQL (and possibly later a graph
database) using the amazing SQLModel. An API built
with FastAPI sits in front of this database and
provides streamlined access to OCDS entities, such as organizations, releases or
contracts. The code that does the parsing and serves the API can be found in
To start developing locally, please consult the documentation or simply run:
The production deployment is handled via the
simply executes the relevant
docker-compose files, which currently are:
./docker-compose.production.ymlfor the production deployment
./api/docker-compose.test.ymlfor the automated tests of API and database
./docker-compose.tdb.ymlfor the TerminusDB deployment on the (temporarily, will be merged into
./docker-compose.production.ymlin the future)
Apart from those, the API and database may be deployed locally with help of relevant
./api/docker-compose.ymlfor the local deployment of TerminusDB and TEDective API
./api/docker-compose-localapi.ymlfor deployment of TEDective API connected to remote database (useful only for development team)
There are a lot of resources that are helpful in developing and extending the parser. The most important ones are:
- The OCDS Schema reference which describes in detail what an OCDS release is and what it should look like
- The OCDS European Union Profile which maps fields in TED notices to fields in an OCDS release (Github, Internal Tooling).
- The OJS' Standard form for public procurement site lists all the forms used in any given TED notice.
TheyBuyForYou (a project by "a consortium of 10 leading companies, universities, research centres, government departments and local authorities in the UK, Norway, Italy, Spain and Slovenia" funded by the EU Horizon 2020 programme. The project cost the EU around €3.3 million and was developed over two years until December 2020. It is now largely dysfunctional and out-of-date. Some code seems to be publicly available but is provided without an explicit license)
DigiWhist's opentender.eu (seems somewhat abandoned, repo is still lightly maintained. Data is updated less than once a month and the frontend code is not open-source. One of the DigiWhist researchers foudned TenderX, a private for-profit tender/company data offering)
NB: This dataset seems to be used by the OCDS tool for scraping globally available OCDS data releases.
OpenTED (seems abandoned, last commit 2015; didn't work with OCDS as it wasn't developed at the time)
opented (very old attempt at parsing TED data that didn't turn out to work)
OpenTED Browser (an academic paper about )
ExtracTED (according to the README, this was used to parse data between 2014-2016; last commit 5 years ago)
eu-hack (last commit 15 months ago, author is a data scientist at Amazon and target format is CSV, I could not run his code and achieve an error-free parsing of more recent TED data)