Home Database Data Sharing: Listings & Marketplace Deep Dive
Advanced 6 min · July 17, 2026

Data Sharing: Listings & Marketplace Deep Dive

Master Snowflake data sharing, listings, and the Marketplace.

N
Naren Founder & Principal Engineer

20+ years shipping high-throughput database systems. Lessons pulled from things that broke in production.

Follow
Production
production tested
July 17, 2026
last updated
2,439
articles · all by Naren
Before you start⏱ 20-25 min read
  • Basic understanding of SQL (SELECT, CREATE VIEW, GRANT)
  • Access to a Snowflake account with ACCOUNTADMIN or equivalent privileges
  • Familiarity with Snowflake's database and schema concepts
 ● Production Incident 🔎 Debug Guide ⚙ Triage Commands
Quick Answer

• Snowflake data sharing allows instant, zero-copy sharing of live data between accounts without moving or copying data. • Listings are published data products on the Snowflake Marketplace, which can be public or private. • The Marketplace is a curated hub where providers list datasets and consumers access them with a few clicks. • Sharing uses readers accounts or data exchange listings; no ETL or data duplication required. • Key features include fine-grained access control, secure views, and usage tracking.

✦ Definition~90s read
What is Data Sharing, Listings, and the Marketplace?

Snowflake data sharing is a feature that lets you share live, queryable data from one Snowflake account to another without copying or moving the data.

Imagine you have a giant library (your Snowflake account) with thousands of books (datasets).
Plain-English First

Imagine you have a giant library (your Snowflake account) with thousands of books (datasets). Normally, if a friend wants to read a book, you'd have to photocopy it and send it—costly and slow. Snowflake data sharing is like giving your friend a magic pair of glasses that lets them read the book directly from your library, in real time, without you ever losing the original. The Marketplace is like a public library where you can put some of your books on display for anyone to borrow instantly.

In the modern data ecosystem, sharing data across teams, partners, and customers is a critical capability. Traditional methods—exporting CSV files, setting up FTP transfers, or building complex ETL pipelines—are slow, error-prone, and create data silos. Snowflake revolutionizes this with its native data sharing, listings, and Marketplace, enabling instant, secure, and governed data collaboration without moving or copying data.

Snowflake data sharing allows you to share live, queryable data from one Snowflake account to another. The shared data remains in the provider's account, so consumers always see the latest version. There's no data duplication, no storage costs for the consumer, and no complex infrastructure. Listings extend this concept by packaging shared data into discoverable products on the Snowflake Marketplace. Providers can publish listings—either publicly to all Snowflake users or privately to specific accounts—and consumers can access them with a few clicks.

This tutorial will guide you through the entire lifecycle: setting up data sharing, creating listings, managing access, and best practices for production. You'll learn how to share data securely using secure views and row-level security, how to monetize your data assets, and how to troubleshoot common issues. By the end, you'll be able to build a data sharing strategy that scales with your organization.

Understanding Snowflake Data Sharing Concepts

Snowflake data sharing is built on a provider-consumer model. The provider creates a share, adds objects (databases, schemas, tables, views, secure views, or secure materialized views), and grants access to one or more consumer accounts. Consumers see the shared data as a read-only database in their own account, with no storage costs. The data is always live—any changes made by the provider are immediately visible to consumers.

Key components
  • Share: A container that holds references to databases and schemas. Shares are created with CREATE SHARE.
  • Secure Views: Views that hide underlying table structures and can enforce row-level security. They are the recommended way to share data because they allow fine-grained access control.
  • Reader Accounts: A special type of account that can only consume shared data. They are used for data sharing with users who don't have a Snowflake account.
  • Data Exchange: A private marketplace for sharing data within an organization or with trusted partners.

When you share a view, the consumer can query it like any other view. However, if you share a table directly, the consumer sees all rows. Secure views are preferred for production because they allow you to apply filters (e.g., only show rows where region = 'US') without exposing the underlying data.

create_share.sqlSQL
1
2
3
4
5
6
7
8
9
10
11
12
-- Provider account: Create a share and add objects
CREATE SHARE my_share;

-- Grant usage on the database and schema
GRANT USAGE ON DATABASE sales_db TO SHARE my_share;
GRANT USAGE ON SCHEMA sales_db.public TO SHARE my_share;

-- Add a secure view to the share
GRANT SELECT ON VIEW sales_db.public.secure_sales_summary TO SHARE my_share;

-- Grant access to a consumer account
ALTER SHARE my_share SET ACCOUNTS = 'CONSUMER_ACCOUNT_LOCATOR';
Output
Share MY_SHARE successfully created.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Share MY_SHARE altered.
🔥Share Naming Convention
📊 Production Insight
Always use secure views instead of direct table shares. Secure views allow you to revoke access at the row level without affecting the consumer's schema. They also prevent consumers from seeing underlying table structures.
🎯 Key Takeaway
A share is a lightweight container that points to database objects. Consumers see a read-only database with no storage overhead.

Setting Up a Consumer Account and Querying Shared Data

Once the provider grants access to a consumer account, the consumer can import the share into their account. This creates a read-only database that references the provider's data. The consumer does not store any data; every query runs on the provider's side.

Steps for the consumer: 1. The provider must know the consumer's account locator (found in the consumer's Snowflake URL or via SELECT CURRENT_ACCOUNT()). 2. The provider runs ALTER SHARE share_name SET ACCOUNTS = consumer_account_locator;. 3. The consumer runs CREATE DATABASE shared_db FROM SHARE provider_account_locator.share_name;. 4. The consumer can now query the shared database like any other database.

Note: The consumer cannot modify the shared data. They can create views, materialized views, or tables on top of the shared data (by copying data into their own tables), but the original shared data remains read-only.

If the consumer needs to share data further, they can create a new share from their own account, but they cannot re-share the provider's data unless the provider explicitly allows it via GRANT REFERENCE_USAGE.

consumer_import.sqlSQL
1
2
3
4
5
6
7
8
-- Consumer account: Import the share
CREATE DATABASE sales_shared FROM SHARE provider_account_locator.my_share;

-- Verify the database exists
SHOW DATABASES;

-- Query the shared view
SELECT region, total_sales FROM sales_shared.public.secure_sales_summary WHERE year = 2024;
Output
Database SALES_SHARED successfully created.
+-----------------------------+--------+------------+
| region | total_sales |
+-----------------------------+--------+------------+
| US | 5000000 |
| EU | 3000000 |
| APAC | 2000000 |
+-----------------------------+--------+------------+
💡Account Locator vs Account Name
📊 Production Insight
If the provider drops a shared object, the consumer's queries will fail immediately. Always communicate schema changes to consumers in advance.
🎯 Key Takeaway
Consumers import shares as read-only databases. Queries run on the provider's compute, but the consumer pays for their own warehouse usage.

Creating Listings for the Snowflake Marketplace

Listings are the mechanism to publish data on the Snowflake Marketplace. A listing wraps a share with metadata such as title, description, pricing (if monetized), and terms of use. Listings can be public (visible to all Snowflake users) or private (visible only to specific accounts).

To create a listing: 1. Ensure you have the CREATE LISTING privilege (granted by ACCOUNTADMIN). 2. Create a share with the data you want to list. 3. Use the Snowflake UI or SQL to create the listing. SQL example: CREATE LISTING my_listing FROM SHARE my_share TITLE = 'Sales Analytics' .... 4. Set the listing status to 'PUBLISHED' to make it visible.

Listings support both free and paid data. For paid listings, you need to set up a listing agreement with Snowflake and define pricing. Snowflake handles billing and takes a revenue share.

You can also create listings that require approval (request-based) or are auto-fulfilled. Auto-fulfilled listings allow consumers to access data immediately without provider intervention.

create_listing.sqlSQL
1
2
3
4
5
6
7
-- Create a listing from an existing share
CREATE LISTING sales_listing
  FROM SHARE my_share
  TITLE = 'Sales Analytics Dataset'
  DESCRIPTION = 'Daily sales data by region and product category.'
  TERMS_OF_USE = 'For internal use only. Not for redistribution.'
  STATUS = 'PUBLISHED';
Output
Listing SALES_LISTING successfully created with status PUBLISHED.
⚠ Listing Visibility
📊 Production Insight
For paid listings, ensure you have a clear pricing model and that your data is consistently updated. Snowflake's usage tracking can help you monitor consumer adoption.
🎯 Key Takeaway
Listings package shares with metadata and visibility controls. They are the primary way to distribute data on the Marketplace.

Managing Access with Secure Views and Row-Level Security

Secure views are the cornerstone of safe data sharing. They allow you to expose only the necessary columns and rows, and they hide the underlying table definitions. Consumers cannot see the view's SQL definition, which protects your intellectual property.

Row-level security can be implemented by using a mapping table that associates consumer accounts with allowed data. For example, you can create a secure view that joins the base table with a permissions table, filtering rows based on the current user's account.

Example: Suppose you have a table sales with a column region. You want each consumer to see only their region. Create a permissions table region_access that maps account locators to regions. Then create a secure view that joins and filters.

Note: The function CURRENT_ACCOUNT() returns the account locator of the consumer running the query. However, in a secure view, this function returns the provider's account locator if the view is defined in the provider's account. To get the consumer's account, use CURRENT_USER() or pass the account as a parameter. A better approach is to use a mapping table that the provider maintains.

secure_view_rls.sqlSQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- Provider: Create permissions table
CREATE TABLE region_access (
    account_locator STRING,
    allowed_region STRING
);
INSERT INTO region_access VALUES ('CONSUMER1', 'US'), ('CONSUMER2', 'EU');

-- Create secure view with row-level security
CREATE SECURE VIEW secure_sales AS
SELECT s.*
FROM sales s
JOIN region_access ra ON s.region = ra.allowed_region
WHERE ra.account_locator = CURRENT_ACCOUNT();

-- Grant access to the share
GRANT SELECT ON VIEW secure_sales TO SHARE my_share;
Output
View SECURE_SALES successfully created.
🔥CURRENT_ACCOUNT() in Secure Views
📊 Production Insight
Always test your secure view with different consumer accounts to verify that row-level filtering works correctly. Use GRANT SELECT on the view only, never on the base tables.
🎯 Key Takeaway
Secure views with row-level security ensure consumers see only the data they are authorized to view, protecting sensitive information.

Monetizing Data with Paid Listings

Snowflake Marketplace allows providers to monetize their data by setting a price for their listings. Paid listings can be one-time purchases or subscriptions. Snowflake handles the billing and remits payments to the provider after deducting a marketplace fee.

To create a paid listing: 1. You must have a Snowflake Business Critical or higher edition account. 2. Sign the Snowflake Marketplace Provider Agreement. 3. Create a listing and set the pricing model (e.g., $100 per month per consumer). 4. Snowflake will validate the listing and make it available.

Consumers see the price and terms before accessing the data. They can request access, and the provider can approve or deny. Snowflake tracks usage for billing.

Best practices for paid listings
  • Provide clear documentation and sample data.
  • Offer a free trial period to attract consumers.
  • Keep your data fresh and reliable; stale data leads to churn.
  • Use secure views to control what consumers can access.
paid_listing.sqlSQL
1
2
3
4
5
6
7
8
9
-- Create a paid listing (requires prior agreement with Snowflake)
CREATE LISTING premium_analytics
  FROM SHARE premium_share
  TITLE = 'Premium Sales Analytics'
  DESCRIPTION = 'Real-time sales data with 1-hour latency.'
  PRICING = 'MONTHLY'
  PRICE = 500
  TERMS_OF_USE = 'Subscription required. Data updated hourly.'
  STATUS = 'PUBLISHED';
Output
Listing PREMIUM_ANALYTICS successfully created with status PUBLISHED.
⚠ Revenue Share
📊 Production Insight
Monitor consumer usage via ACCOUNT_USAGE.LISTING_ACCESS_HISTORY to understand which consumers are active and adjust pricing or data offerings accordingly.
🎯 Key Takeaway
Paid listings enable data monetization. Snowflake handles billing, but you must ensure data quality and freshness.

Best Practices for Production Data Sharing

Implementing data sharing in production requires careful planning to ensure security, reliability, and performance.

  1. Use Secure Views: Always share data through secure views rather than base tables. This provides an abstraction layer and allows you to change underlying schemas without breaking consumers.
  2. Version Your Shares: When making breaking changes, create a new share (e.g., sales_v2) and gradually migrate consumers. Deprecate old shares after a transition period.
  3. Monitor Usage: Use Snowflake's ACCOUNT_USAGE views (e.g., SHARE_USAGE_HISTORY, LISTING_ACCESS_HISTORY) to track who is accessing your data and how often.
  4. Set Up Alerts: Configure alerts for when a share is dropped or a listing becomes inactive. Use Snowflake's notification integration or external monitoring.
  5. Document Everything: Maintain a data catalog that describes each share, listing, and the underlying views. Include contact information for data owners.
  6. Test in a Non-Production Account: Before publishing a listing or updating a share, test the changes in a separate account to avoid impacting consumers.
  7. Limit Privileges: Grant only necessary privileges to roles that manage shares and listings. Use custom roles instead of ACCOUNTADMIN.

Performance considerations: Shared queries run on the provider's warehouse. If you have many consumers, consider using a dedicated warehouse for sharing to avoid contention. Also, use clustering on large tables to improve query performance.

monitor_shares.sqlSQL
1
2
3
4
5
6
7
8
9
10
11
-- View share usage history
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.SHARE_USAGE_HISTORY
WHERE SHARE_NAME = 'MY_SHARE'
ORDER BY START_TIME DESC
LIMIT 10;

-- View listing access history
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.LISTING_ACCESS_HISTORY
WHERE LISTING_NAME = 'SALES_LISTING'
ORDER BY ACCESS_TIME DESC
LIMIT 10;
Output
Share usage history and listing access history returned.
💡Use Reader Accounts for External Consumers
📊 Production Insight
Avoid sharing tables directly; always use secure views. This prevents consumers from seeing underlying table structures and allows you to change schemas without breaking existing queries.
🎯 Key Takeaway
Treat shares and listings as production artifacts. Version them, monitor usage, and communicate changes to consumers.

Troubleshooting Common Issues

Even with careful planning, issues can arise. Here are common problems and solutions:

Problem: Consumer gets 'Insufficient privileges' error. - Cause: The share is not granted to the consumer's account, or the consumer's role lacks USAGE on the imported database. - Fix: Verify the share grants: SHOW GRANTS OF SHARE share_name;. Ensure the consumer's role has USAGE on the database: GRANT USAGE ON DATABASE shared_db TO ROLE consumer_role;.

Problem: Listing is not visible in Marketplace. - Cause: The listing status is not PUBLISHED, or the listing is private and the consumer's account is not in the allowed list. - Fix: Check listing status: SHOW LISTINGS;. If private, add the consumer's account: ALTER LISTING listing_name SET ACCOUNTS = 'consumer_account';.

Problem: Query on shared view returns no rows. - Cause: Row-level security filter is too restrictive, or the view references objects that no longer exist. - Fix: Test the view definition in the provider account with the same context. Check if the underlying tables have data.

Problem: Consumer sees stale data. - Cause: The consumer may have created a local copy (e.g., a table) from the shared data. Shared data itself is always live. - Fix: Remind consumers to query the shared database directly, not local copies.

Problem: Provider cannot drop a share because it's referenced by a listing. - Cause: Listings hold a reference to the share. You must drop the listing first. - Fix: DROP LISTING listing_name; then DROP SHARE share_name;.

troubleshoot.sqlSQL
1
2
3
4
5
6
7
8
9
10
-- Check if share exists and its grants
SHOW SHARES;
SHOW GRANTS OF SHARE my_share;

-- Check listing status
SHOW LISTINGS;

-- Drop a listing before dropping the share
DROP LISTING sales_listing;
DROP SHARE my_share;
Output
Share and listing information displayed.
⚠ Dropping Shares
📊 Production Insight
Implement a change management process for shares and listings. Use version control for share definitions (e.g., Terraform) to track changes and enable rollbacks.
🎯 Key Takeaway
Most issues stem from permission misconfigurations or schema changes. Use monitoring and communication to minimize disruptions.
● Production incidentPOST-MORTEMseverity: high

The Case of the Missing Marketplace Listing

Symptom
Consumers reported that a previously accessible listing was no longer visible in the Snowflake Marketplace. Queries against the shared database returned 'Object does not exist' errors.
Assumption
The developer assumed the listing was accidentally removed by a junior admin or that a scheduled refresh had failed.
Root cause
The provider had changed the underlying share's secure view definition, which invalidated the listing's binding. Snowflake requires that the share's objects remain unchanged; altering the view's schema or dropping it breaks the listing's reference.
Fix
The provider re-created the share with the updated view and re-published the listing. They also added a CI/CD check to prevent schema changes to shared objects without updating the listing.
Key lesson
  • Always treat shared objects as immutable contracts; use versioned views or aliases to allow schema evolution.
  • Implement monitoring on listing status using Snowflake's INFORMATION_SCHEMA or ACCOUNT_USAGE views.
  • Document the dependency between listings and underlying shares to avoid accidental deletions.
  • Use Terraform or Snowflake's Python SDK to manage listings as code for auditability.
  • Test listing changes in a non-production account before applying to production.
Production debug guideSymptom to Action4 entries
Symptom · 01
Consumer cannot query shared data: 'Object does not exist'
Fix
Verify the share exists in the provider account: SHOW SHARES;. Check if the share is still granted to the consumer: SHOW GRANTS OF SHARE <share_name>;. Ensure the underlying database and schema are not dropped.
Symptom · 02
Listing not visible in Marketplace
Fix
Check listing status: SHOW LISTINGS;. Ensure listing is in 'Published' state. Verify that the share is still valid and the listing's target accounts (if private) are correct.
Symptom · 03
Consumer sees stale data
Fix
Confirm that the share is using a live view, not a static copy. Check if the provider has time travel enabled and if the consumer is querying a past snapshot.
Symptom · 04
Permission denied when creating a listing
Fix
Ensure the role has the CREATE LISTING privilege. Also need USAGE on the share and the underlying database/schema.
★ Quick Debug Cheat SheetCommon symptoms and immediate actions for Snowflake data sharing issues.
Consumer can't see shared database
Immediate action
Check if share is granted to consumer's account
Commands
SHOW SHARES;
SHOW GRANTS OF SHARE my_share;
Fix now
Re-grant the share: GRANT USAGE ON SHARE my_share TO ACCOUNT consumer_account;
Listing not published+
Immediate action
Verify listing status and share validity
Commands
SHOW LISTINGS;
SHOW SHARES LIKE '%listing_share%';
Fix now
Re-publish listing: ALTER LISTING my_listing SET STATUS = 'PUBLISHED';
Query returns no rows unexpectedly+
Immediate action
Check if secure view filters are too restrictive
Commands
SELECT * FROM shared_db.shared_schema.secure_view LIMIT 10;
DESCRIBE VIEW shared_db.shared_schema.secure_view;
Fix now
Update view definition to include more data or adjust row-level security.
FeatureData SharingDatabase ReplicationListing
Data freshnessReal-timeScheduled (minutes/hours)Real-time
Storage cost for consumerNoneFull copy costNone
Data movementNone (zero-copy)Full copyNone
Access controlSecure views, row-level securityDatabase-levelListing-level + share-level
MonetizationNot directlyNot directlyYes (paid listings)
Cross-cloud supportYesYesYes
⚙ Quick Reference
7 commands from this guide
FileCommand / CodePurpose
create_share.sqlCREATE SHARE my_share;Understanding Snowflake Data Sharing Concepts
consumer_import.sqlCREATE DATABASE sales_shared FROM SHARE provider_account_locator.my_share;Setting Up a Consumer Account and Querying Shared Data
create_listing.sqlCREATE LISTING sales_listingCreating Listings for the Snowflake Marketplace
secure_view_rls.sqlCREATE TABLE region_access (Managing Access with Secure Views and Row-Level Security
paid_listing.sqlCREATE LISTING premium_analyticsMonetizing Data with Paid Listings
monitor_shares.sqlSELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.SHARE_USAGE_HISTORYBest Practices for Production Data Sharing
troubleshoot.sqlSHOW SHARES;Troubleshooting Common Issues

Key takeaways

1
Snowflake data sharing enables instant, zero-copy data collaboration across accounts without moving data.
2
Always use secure views to share data; they provide abstraction, security, and row-level filtering.
3
Listings package shares into discoverable products on the Marketplace, supporting both free and paid distribution.
4
Monitor shares and listings using ACCOUNT_USAGE views to track usage and troubleshoot issues.
5
Plan for schema evolution by versioning shares and communicating changes to consumers.

Common mistakes to avoid

4 patterns
×

Sharing base tables instead of secure views

×

Forgetting to grant USAGE on the database and schema to the share

×

Using CURRENT_ACCOUNT() in a secure view expecting it to return the consumer's account

×

Not monitoring listing usage and failing to update stale data

INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
What is the difference between a share and a listing in Snowflake?
Q02SENIOR
How can you implement row-level security in a shared view?
Q03SENIOR
Explain how to handle schema evolution when sharing data. What happens i...
Q01 of 03JUNIOR

What is the difference between a share and a listing in Snowflake?

ANSWER
A share is a container that references database objects (tables, views) and grants access to specific consumer accounts. A listing is a published data product on the Snowflake Marketplace that wraps a share with metadata (title, description, pricing) and visibility settings (public or private). Listings are the way to distribute data via the Marketplace, while shares are the underlying mechanism.
FAQ · 5 QUESTIONS

Frequently Asked Questions

01
Can I share data with a consumer who doesn't have a Snowflake account?
02
How is data sharing different from data replication?
03
Can I share data across regions or cloud platforms?
04
What happens if I drop a table that is part of a share?
05
How do I charge for my data on the Marketplace?
N
Naren Founder & Principal Engineer

20+ years shipping high-throughput database systems. Lessons pulled from things that broke in production.

Follow
Verified
production tested
July 17, 2026
last updated
2,439
articles · all by Naren
🔥

That's Snowflake. Mark it forged?

6 min read · try the examples if you haven't

Previous
Streams and Tasks: Automated Real-Time Data Pipelines
9 / 33 · Snowflake
Next
Security: RBAC, Network Policies, Authentication, and Data Masking