---
title: "Automatic Instrumentation"
description: "Learn what instrumentation automatically captures transactions."
url: https://docs.sentry.io/platforms/python/tracing/instrumentation/automatic-instrumentation/
---

# Automatic Instrumentation | Sentry for Python

Many integrations for popular frameworks automatically capture transactions (or service spans in [stream mode](https://docs.sentry.io/platforms/python/tracing/streamed-spans.md)). If you already have any of the following frameworks set up for Sentry error reporting, you will start to see traces immediately:

* All WSGI-based web frameworks (Django, Flask, Pyramid, Falcon, Bottle)
* Celery
* AIOHTTP web apps
* Redis Queue (RQ)

See the full [list of available integrations](https://docs.sentry.io/platforms/python/integrations.md).

Spans are instrumented for the following operations within a transaction/service span:

* Database queries that use SQLAlchemy or the Django ORM
* HTTP requests made with HTTPX, requests, the stdlib, AIOHTTP, or pyreqwest
* Spawned subprocesses
* Redis operations

In transaction mode, spans are only created within an existing transaction. If you're not using any of the supported frameworks, you'll need to [create transactions manually](https://docs.sentry.io/platforms/python/tracing/instrumentation/custom-instrumentation.md).

Stream mode removes this limitation. Since there are no transactions, any span started without a parent is automatically promoted to a service span (the equivalent of a transaction). You can also force any span to become a service span when starting it by setting its parent to `None`. See [Custom Instrumentation](https://docs.sentry.io/platforms/python/tracing/instrumentation/custom-instrumentation.md) to learn more.
