We send a newsletter once a month to our wider community of users and supporters. This is done via Mailchimp.
Newsletter Process
Signups
People can subscribe to the newsletter using the form at the bottom of the homepage.
Import Recipients
Users who create new platform accounts and opt-in to the newsletter need to be added manually. A developer with database access needs to export the data. Then use Mailchimp's 'import contacts' function to add them to the main mailing list.
Content
Content can come from a range of sources.
Examples:
Announcing new features or improvements
Tweets about Open Collective or a specific Collective
Blog posts by Open Collective
Blog posts and articles by other people
Media like podcasts or videos of talks
Exciting partnerships with sponsors
Tips and ideas for Collective fundraising
New noteworthy Collectives that joined
The general style is brief and straightforward, with opportunities to click through for more info.
Leaderboard
The monthly leaderboard is a popular section of the newsletter, showing top backers & sponsors, top Collectives by new backers, and top new Collectives by donations. To get this data, use the following queries, and then put the data in the team Google Drive.
Top backers
with res as (SELECT CONCAT('https://opencollective.com/', max(backer.slug)) as backer, sum(amount) /100 as "amount", max(t.currency) as currency, string_agg(DISTINCT c.slug, ', ') AS"collectives supported", max(backer."twitterHandle") as twitter, max(backer.description) as description, max(backer.website) as websiteFROM "Transactions" tLEFT JOIN "Collectives" backer ON backer.id = t."FromCollectiveId"LEFT JOIN "Collectives" c ON c.id = t."CollectiveId"WHERE t."createdAt">'2019-01-01' AND t."createdAt"<'2019-02-01' AND t.type='CREDIT' AND t."platformFeeInHostCurrency"<0 AND t."deletedAt" IS NULL GROUP BY t."FromCollectiveId" ORDER BY "amount"DESC) SELECT row_number() over(order by"amount"DESC) as "#", *from res
Top collectives by number of new backers
SELECT max(c.slug) as collective, max(c."createdAt") as "createdAt", count(*) as "totalNewBackers", max(c.website) as website, max(c."twitterHandle") as twitter, max(c.description) as descriptionFROM "Members" mLEFT JOIN "Collectives" c ON m."CollectiveId"= c.idWHERE m."createdAt">'2019-01-01' AND m."createdAt"<'2019-02-01' AND m.role='BACKER'GROUP BY "CollectiveId"ORDER BY "totalNewBackers"DESC
Top new collectives by amount received
SELECT sum(amount) /100 as "totalAmount", max(t.currency) as currency, max(c.slug) as collective, max(c.website) as website, max(c."twitterHandle") as twitter, max(c.description) as descriptionFROM "Transactions" tLEFT JOIN "Collectives" c ON c.id = t."CollectiveId"WHERE t."createdAt">'2019-01-01' AND c."createdAt">'2019-01-01' AND t."createdAt"<'2019-02-01' AND c."createdAt"<'2019-02-01' AND t.type='CREDIT' AND t."platformFeeInHostCurrency"<0 GROUP BY t."CollectiveId" ORDER BY "totalAmount"DESC
List of transactions
SELECT t."createdAt", c.slug as "collective slug", t.type as "transaction type", t.amount, t.currency, fc.slug as "from slug", fc.type as "from type", t.description, e.category as "expense category", h.slug as "host slug", t."hostCurrency", t."hostCurrencyFxRate", pm.service as "payment processor", pm.type as "payment method type", t."paymentProcessorFeeInHostCurrency", t."hostFeeInHostCurrency", t."platformFeeInHostCurrency"FROM "Transactions" tLEFT JOIN "Collectives" fc ON fc.id=t."FromCollectiveId"LEFT JOIN "Collectives" c ON c.id=t."CollectiveId"LEFT JOIN "Collectives" h ON h.id=t."HostCollectiveId"LEFT JOIN "PaymentMethods" pm ON pm.id=t."PaymentMethodId"LEFT JOIN "Expenses" e ON e.id=t."ExpenseId"WHERE t."createdAt">='2019-01-01' AND t."createdAt"<'2019-02-01' AND t."deletedAt" IS NULLORDER BY t.id ASC