One of the cool services that SendGrid offers is their Event API that it will notify you via an HTTP POST on events related to each individual email that you sent through its service.
There are a number of apps out there to work with SendGrid's service but none that worked how we wanted, so we built a new one. django-sendgrid-events does one thing, and I believe does that one thing very well.
Our django-sendgrid-events app is designed to only accept batches. SendGrid allows you to specify if you want to receive each POST for a single email or in batches of emails every few seconds. For our needs it just made sense to handle batches.
Furthermore, django-sendgrid-events is designed to only handle Events API call backs. It doesn't integrate with any of the rest of the SendGrid APIs. Several apps out there have custom backends for sending mail through SendGrid, but we have been pretty successful just using the SMTP API by just configuring the EMAIL_* settings as appropriate.
The key to linking specific emails with activity in your site is in sending special headers when you send the email. You can see examples of this in the usage documentation.