Skip to main content

teemup

If Meetup didn't become a walled garden, the world wouldn't need Teemup

Purpose and scope

This library takes HTML source of a meetup group page on Meetup and returns a list of their upcoming events.

Usage

>>> import urllib.request
>>> from teemup import parse
>>> with urllib.request.urlopen('https://www.meetup.com/dresdenjs-io-javascript-user-group/') as f:
...     html = f.read()
...
>>> events = parse(html)
>>> event = next(event for event in events if event['venue'] is not None)
>>> sorted(event.keys())
['description', 'ends_at', 'group_name', 'starts_at', 'title', 'url', 'venue']
>>> sorted(event['venue'])
['address', 'city', 'country', 'name', 'state']

The example above is tested and thus doesn't contain any variable data, but should be enough to give you an idea.

If something breaks

If the website changes, update the fixture:

curl https://www.meetup.com/reactgirls/ > test_fixtures/response_content.html

Then run poetry run pytest. Change teemup.py and add unit tests to test_teemup.py as needed. Then cut a new release:

  • Make sure the tests really pass: poetry run pytest
  • Format the code: poetry run black .
  • Raise the version number in pyproject.toml
  • Commit the changes: git commit -am "release vX.Y.Z"
  • Create a version tag: git tag vX.Y.Z
  • Push the tag: git push --follow-tags

Note: If there are no upcoming events, choose a different group page for testing. Do not remove live testing from the repository! The whole purpose of the library is to be up-to-date with the current website. It must be monitored every day and fixed as soon as it breaks.

Why

Meetup used to be a nice and friendly platform where to host your events. It used to have an iCalendar export, RSS export, Atom export.

Such exports are useful if one wants to follow certain meetup in their own calendar software, or if one wants to read the event feed by a program and automatically link to upcoming events from a website – effectively sending more people to the events and more potential users to Meetup.

In March 2023 they've put these exports behind login, basically rendering them useless. You can download the files manually, but automatic fetching for future events is impossible. They do have an API (with horrendous auth flow), but that API is reserved to paying users only.

After a long conversation with their support (June 2023), they confirmed the login is intentional, but they couldn't explain why they did such product decision and how it benefits their users. From that point on, I consider Meetup to be a hostile walled garden, which contributes to harming the free and open internet.

All my integrations broke down, and not only mine.

I figured out they left JSON-DL meta data on the page. Such meta data is good for search engines and other tooling and can be read by extruct. This allowed me to fix everything for a while, but in August 2023, the JSON-DL has also disappeared from the website.

All out war then! I moved the code to this separate library so it's easier to develop, re-use, contribute to, and monitor.

License

MIT

Metadata

Release files for teemup 1.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for teemup 1.2.2
File Size Uploaded
teemup-1.2.2.tar.gz 3.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for teemup 1.2.2
File Interpreter ABI Platform
teemup-1.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 8.2 kB

Release files / teemup-1.2.2.tar.gz

Download URL teemup-1.2.2.tar.gz
Size 3.8 kB
Tags Source
SHA-256 checksum
How to use checksums
c850e77c18bac840104af6f78077d8f4cb00c387a83e7460328468a791e9cad3
BLAKE2b-256 checksum
How to use checksums
7f483e7cb942a6fddae6b14b3d97b0711bcd4669eca568805474ac651e9a3c81
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 13, 2026.

Transparency log

Release files / teemup-1.2.2-py3-none-any.whl

Download URL teemup-1.2.2-py3-none-any.whl
Size 4.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
66fb85b83c75bf092a6fe12f78d89b86bb81aa0f8d22a076a7c932ae1f664170
BLAKE2b-256 checksum
How to use checksums
5b3b086f2bfbe5edf509b436807680224808ab989f14da27a14c12932ee9a1a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.2 This release

2 release files

1.2.1

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page