acquisitionuniverse (Python)
Utilities for search funds, independent sponsors and corporate development teams who work from screened company lists. Score records, rank them, measure evidence gaps and generate a clean thesis brief.
Pure Python, standard library only, offline.
pip install acquisitionuniverse
Where it fits
A full-web screen hands you a long ranked file. Before you call anyone you want to answer three questions: what exactly did we ask for, which companies come first, and how much is the file really telling us?
This package answers those with small functions that work on dictionaries and DataFrame rows alike. The method behind the screens is described on the search fund target lists page.
1. Write the brief
from acquisitionuniverse import ThesisBrief
brief = ThesisBrief(
name="Calibration labs, Midwest",
vertical="Calibration and metrology",
regions=["Ohio", "Michigan", "Indiana"],
employees_min=8,
employees_max=60,
must_have=["ISO/IEC 17025 accreditation"],
exclusions=["group-owned", "single-person shops"],
)
assert brief.validate() == []
print(brief.to_text())
to_json() gives the same content as a string for a ticket or a shared drive.
2. Rank the file
from acquisitionuniverse import rank
companies = [
{"id": "C-01", "mandate_fit": 92, "outreach_suitability": 75, "transition_context": 60},
{"id": "C-02", "mandate_fit": 97, "outreach_suitability": 90, "transition_context": 80, "group_owned": True},
{"id": "C-03", "mandate_fit": 84, "outreach_suitability": 88, "transition_context": 40},
]
for c in rank(companies):
print(c["id"], c["composite"])
C-02 has the best fit but belongs to a group, so its outreach component is zero and it falls behind C-01. That ordering is the point: you should call the independent first.
Custom weights:
rank(companies, weights={"mandate_fit": 0.6, "outreach_suitability": 0.3, "transition_context": 0.1})
3. Count the evidence
from acquisitionuniverse import SIGNALS, signal_coverage
record = {SIGNALS[0]: "founder led", SIGNALS[3]: "service company", SIGNALS[10]: None}
print(signal_coverage(record)) # {'visible': 2, 'checked': 3, 'ratio': 0.666...}
A value of None or the string "not visible" counts as silent. You see at a glance whether a high score rests on much evidence or little.
With pandas
import pandas as pd
from acquisitionuniverse import composite
df = pd.read_csv("screen.csv")
df["composite"] = df.apply(
lambda r: composite({
"mandate_fit": r.mandate_fit,
"outreach_suitability": r.outreach_suitability,
"transition_context": r.transition_context,
"group_owned": r.group_owned == "yes",
}),
axis=1,
)
df.sort_values("composite", ascending=False).head(25).to_csv("call_list.csv", index=False)
Reference
| Name | Kind | Notes |
|---|---|---|
ThesisBrief |
dataclass | validate, to_dict, to_json, to_text |
composite(company, weights=None) |
function | 0 to 100, one decimal |
rank(companies, weights=None) |
function | returns copies with composite |
signal_coverage(map) |
function | visible, checked, ratio |
SIGNALS |
tuple | 15 names |
DEFAULT_WEIGHTS |
dict | 0.7, 0.2, 0.1 |
PILOT_URL |
str | pilot request page |
Related products
Alpha Quantum also publishes an audience segmentation API for advertisers and a CV parser for hiring teams. Neither is needed here.
Questions
Is a database included? No. Bring your own screened records.
Why dictionaries? They match JSON, CSV rows and pandas without a conversion step.
Python versions? 3.7 and up. MIT license. info@alpha-quantum.com
Metadata
Release files for acquisitionuniverse 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| acquisitionuniverse-1.0.0.tar.gz | 6.4 kB | Without provenance | Details for acquisitionuniverse-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| acquisitionuniverse-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for acquisitionuniverse-1.0.0-py3-none-any.whl |
Total release size: 12.9 kB
Release files / acquisitionuniverse-1.0.0.tar.gz
| Download URL | acquisitionuniverse-1.0.0.tar.gz |
|---|---|
| Size | 6.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ceb4a83cbe758c2b8f8937262887140a5c28e82b7c02c4e0eba94aec0320f431
|
|
BLAKE2b-256 checksum How to use checksums |
72eefc15b29860eca993821832654cd5506471c38a7575b9e11c7fc3663c4437
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.8.10
|
Release files / acquisitionuniverse-1.0.0-py3-none-any.whl
| Download URL | acquisitionuniverse-1.0.0-py3-none-any.whl |
|---|---|
| Size | 6.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7036bb3e7a211c51dfa0a6d5ffe2342a32982e43631b926a48c243f12499e059
|
|
BLAKE2b-256 checksum How to use checksums |
332ebc5aa90e25c0cfa9dbd40a8dded06b413bd6b78a80498d20bad170acd34d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.8.10
|
Security for acquisitionuniverse 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.