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().

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 countries row tied to them, plus the global world aggregate.
  • 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.

TableWhat it contains
worldSingleton row of global aggregates: country count, bank count, story count, plus the 14-category vote totals and scores.
countriesOne row per country: name, ISO code, flag emoji, world rank, and per-country aggregate scores across the 14 categories.
banksOne row per bank in each country: name, URL, description, world + country rank, story count, and per-bank aggregate scores.
bank_votesIndividual upvote / downvote events on a specific bank in a specific category. PII (IP addresses, user IDs) is excluded.
storiesUser-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. countries contains only the US row; banks contains those 20 institutions; bank_votes and stories contain every event attached to them. The world row 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.

$1,499 USD per month, billed by Snowflake on your existing Snowflake invoice. To upgrade:

  1. Find Moon Banking on the Snowflake Marketplace.
  2. Install the listing (Limited Trial is provisioned automatically).
  3. Click Upgrade on the listing detail page.
  4. Snowflake adds the subscription to your invoice, and SYSTEM$IS_LISTING_PURCHASED() flips to TRUE immediately. 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; the tags column on stories is ARRAY.
  • Time Travel. Available consumer-side: clone the share to your own database and set DATA_RETENTION_TIME_IN_DAYS = N on the cloned tables.
  • Refresh cadence. Daily at ~05:00 UTC.
  • Clustering. bank_votes and stories are clustered by bank_id so 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.

Was this page helpful?