Moon Banking on the Snowflake Marketplace
Query Moon Banking data directly inside Snowflake. One listing, two tiers — free Limited Trial (top 20 US banks by community vote count) and paid global subscription ($1,499/mo, billed natively by Snowflake), gated automatically by
SYSTEM$IS_LISTING_PURCHASED().
View the listing on Snowflake Marketplace to install the free Limited Trial or upgrade to the paid tier.
If your team already lives in Snowflake, you can pull Moon Banking's bank, vote, story, and aggregate data straight into your account as a native Snowflake share. No API integration, no auth tokens, no rate limits — just a five-table schema sitting next to your other data, with all the consumer ergonomics Snowflake gives you (Snowsight catalog, secure data sharing, Time Travel, dbt, etc.).
Unlike the Databricks Marketplace listing — which uses a separate free preview share and a paid full share — the Snowflake Marketplace policy is one share per dataset. So we ship a single listing with two pricing tiers, and Snowflake's SYSTEM$IS_LISTING_PURCHASED() provider function does the trial-vs-paid gating for us inside secure views:
- Limited Trial — free, auto-fulfilled. Top 20 US banks by community vote count, plus the votes, stories, and
countriesrow tied to them, plus the globalworldaggregate. - Paid subscription — $1,499 USD / month. Same share, every row visible. Snowflake bills you on your existing Snowflake invoice.
Switching from trial to paid is a one-click upgrade in Snowflake. Your share stays attached, your queries stay the same — the secure views just start returning more rows.
Tables
The five published tables are identical in shape to the Databricks listing, so SQL written against one cloud reads almost verbatim on the other. We commit to additive-only schema changes with 30-day advance notice on any new column, and we never rename, drop, or change the type of an existing column.
| Table | What it contains |
|---|---|
world | Singleton row of global aggregates: country count, bank count, story count, plus the 14-category vote totals and scores. |
countries | One row per country: name, ISO code, flag emoji, world rank, and per-country aggregate scores across the 14 categories. |
banks | One row per bank in each country: name, URL, description, world + country rank, story count, and per-bank aggregate scores. |
bank_votes | Individual upvote / downvote events on a specific bank in a specific category. PII (IP addresses, user IDs) is excluded. |
stories | User-submitted short reviews about a bank, with sentiment + tags. PII excluded. |
The 14 voting categories — crypto_friendly, customer_service, fees_pricing, digital_experience, security_trust, account_features, branch_atm_access, international_banking, business_banking, processing_speed, transparency, innovation, investment_services, lending — are stored as VARIANT columns on world, countries, and banks. Each one is a JSON object with four subfields: score (integer, -100..100), total (total votes), up (upvotes), and down (downvotes). Access them with Snowflake's colon-and-cast syntax:
SELECT
name,
overall:score::NUMBER AS score,
overall:total::NUMBER AS votes,
overall:up::NUMBER AS upvotes,
overall:down::NUMBER AS downvotes
FROM moonbanking.shared.banks
ORDER BY score DESC NULLS LAST
LIMIT 10;
What's NOT in the share
We deliberately strip every form of PII before publishing:
- No user identities, names, emails, or accounts
- No IP addresses on votes or stories
- No internal API keys, fingerprints, or tracking signals
- No moderation flags or admin-only fields
Limited Trial
The trial is instantly accessible — there's no request flow, no email exchange, no payment. Click Get Data on the listing page in Snowflake and the share appears in your account, default database name MOONBANKING.
What's different from the paid tier:
- Coverage: The 20 US banks with the highest community vote count.
countriescontains only the US row;bankscontains those 20 institutions;bank_votesandstoriescontain every event attached to them. Theworldrow is global aggregates and is identical to the paid tier. - Refresh cadence: Daily, same as paid. The 20-bank roster is recomputed on each refresh, so a bank that climbs into the top 20 will appear in the next day's snapshot.
What's the same:
- Identical five-table schema and column docs.
- Snowflake-native share — clone, query, and dbt-model exactly the same way.
- Schema-stability commitment.
Paid subscription
$1,499 USD per month, billed by Snowflake on your existing Snowflake invoice. To upgrade:
- Find Moon Banking on the Snowflake Marketplace.
- Install the listing (Limited Trial is provisioned automatically).
- Click Upgrade on the listing detail page.
- Snowflake adds the subscription to your invoice, and
SYSTEM$IS_LISTING_PURCHASED()flips toTRUEimmediately. The secure views start returning the full dataset on your next query — no DDL, no re-attach, no consumer-side change.
Cancel any time. Access remains until the end of the current billing period; at that point SYSTEM$IS_LISTING_PURCHASED() flips back to FALSE and you transparently downgrade to the trial slice. There are no refunds — see the Snowflake Marketplace Refund Policy.
Engineering features
- Format. Native Snowflake share, exposed as five secure views. Standard Snowflake-to-Snowflake — no client setup required.
- Schema. Stable, additive-only. Aggregate columns are
VARIANT; thetagscolumn onstoriesisARRAY. - Time Travel. Available consumer-side: clone the share to your own database and set
DATA_RETENTION_TIME_IN_DAYS = Non the cloned tables. - Refresh cadence. Daily at ~05:00 UTC.
- Clustering.
bank_votesandstoriesare clustered bybank_idso consumer queries that filter by bank prune micro-partitions automatically.
Sample queries
Take a look at Quick Start Examples in the Snowflake Marketplace listing. A couple of representative snippets:
-- The trial slice — top 20 US banks by community vote count.
SELECT
b.name,
c.name AS country,
b.overall:score::FLOAT AS score,
b.stories_count
FROM moonbanking.shared.banks b
JOIN moonbanking.shared.countries c
ON c.id = b.country_id
WHERE c.code = 'US'
ORDER BY score DESC
LIMIT 20;
-- Tag explosion — useful as the input for downstream LLM topic clustering.
SELECT
t.value::TEXT AS tag,
COUNT(*) AS story_count
FROM moonbanking.shared.stories s,
LATERAL FLATTEN(INPUT => s.tags) t
GROUP BY 1
ORDER BY story_count DESC
LIMIT 50;
License
Use of the Moon Banking dataset on the Snowflake Marketplace is governed by the Snowflake Marketplace Data License. Highlights:
- Analytics, AI/ML model training (including generative AI, large language models, agents, and other foundation models), fine-tuning, evaluation, research, and dashboarding are permitted. Models you train on the data are yours to ship as derivative works.
- Redistribution of the raw dataset, repackaging, exposing the data through a public API, or building a product that is substantially similar in purpose to Moon Banking is not permitted.
- See the license for the full terms.
Support
Questions about billing, access, schema, or data quality? Email support@e.moonbanking.com.