diff --git a/samples/searchforshopping/basic.py b/samples/searchforshopping/basic.py
new file mode 100644
index 0000000..96feeb6
--- /dev/null
+++ b/samples/searchforshopping/basic.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Basic query against the public shopping search API"""
+
+import pprint
+
+from apiclient.discovery import build
+
+
+SHOPPING_API_VERSION = 'v1'
+DEVELOPER_KEY = 'AIzaSyACZJW4JwcWwz5taR2gjIMNQrtgDLfILPc'
+
+
+def main():
+  """Get and print a feed of all public products available in the
+  United States.
+
+  Note: The source and country arguments are required to pass to the list
+  method.
+  """
+  client = build('shopping', SHOPPING_API_VERSION, developerKey=DEVELOPER_KEY)
+  resource = client.products()
+  request = resource.list(source='public', country='US')
+  response = request.execute()
+  pprint.pprint(response)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/samples/searchforshopping/crowding.py b/samples/searchforshopping/crowding.py
new file mode 100644
index 0000000..bf1114e
--- /dev/null
+++ b/samples/searchforshopping/crowding.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Query with grouping against the shopping search API"""
+
+import pprint
+
+from apiclient.discovery import build
+
+
+SHOPPING_API_VERSION = 'v1'
+DEVELOPER_KEY = 'AIzaSyACZJW4JwcWwz5taR2gjIMNQrtgDLfILPc'
+
+
+def main():
+  """Get and print a feed of public products in the United States mathing a text
+  search query for 'digital camera' and grouped by the 8 top brands.
+
+  The list method of the resource should be called with the "crowdBy" parameter.
+  Each parameter should be designed as <attribute>:<occurence>, where
+  <occurrence> is the number of that <attribute> that will be used. For
+  example, to crowd by the 5 top brands, the parameter would be "brand:5". The
+  possible rules for crowding are currently:
+
+  account_id:<occurrence> (eg account_id:5)
+  brand:<occurrence> (eg brand:5)
+  condition:<occurrence> (eg condition:3)
+  gtin:<occurrence> (eg gtin:10)
+  price:<occurrence> (eg price:10)
+
+  Multiple crowding rules should be specified by separating them with a comma,
+  for example to crowd by the top 5 brands and then condition of those items,
+  the parameter should be crowdBy="brand:5,condition:3"
+  """
+  client = build('shopping', SHOPPING_API_VERSION, developerKey=DEVELOPER_KEY)
+  resource = client.products()
+  # The crowdBy parameter to the list method causes the results to be grouped,
+  # in this case by the top 8 brands.
+  request = resource.list(source='public', country='US', q=u'digital camera',
+                          crowdBy='brand:8')
+  response = request.execute()
+  pprint.pprint(response)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/samples/searchforshopping/fulltextsearch.py b/samples/searchforshopping/fulltextsearch.py
new file mode 100644
index 0000000..9a5fa5e
--- /dev/null
+++ b/samples/searchforshopping/fulltextsearch.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Full text search query against the shopping search API"""
+
+import pprint
+
+from apiclient.discovery import build
+
+
+SHOPPING_API_VERSION = 'v1'
+DEVELOPER_KEY = 'AIzaSyACZJW4JwcWwz5taR2gjIMNQrtgDLfILPc'
+
+
+def main():
+  """Get and print a feed of all public products matching the search query
+  "digital camera".
+
+  This is achieved by using the q query parameter to the list method.
+
+  The "|" operator can be used to search for alternative search terms, for
+  example: q = 'banana|apple' will search for bananas or apples.
+
+  Search phrases such as those containing spaces can be specified by surrounding
+  them with double quotes, for example q='"mp3 player"'. This can be useful when
+  combining with the "|" operator such as q = '"mp3 player"|ipod'.
+  """
+  client = build('shopping', SHOPPING_API_VERSION, developerKey=DEVELOPER_KEY)
+  resource = client.products()
+  # Note the 'q' parameter, which will contain the value of the search query
+  request = resource.list(source='public', country='US', q=u'digital camera')
+  response = request.execute()
+  pprint.pprint(response)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/samples/searchforshopping/histograms.py b/samples/searchforshopping/histograms.py
new file mode 100644
index 0000000..6d198ff
--- /dev/null
+++ b/samples/searchforshopping/histograms.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Query with ranked results against the shopping search API"""
+
+from apiclient.discovery import build
+
+
+SHOPPING_API_VERSION = 'v1'
+DEVELOPER_KEY = 'AIzaSyACZJW4JwcWwz5taR2gjIMNQrtgDLfILPc'
+
+
+def main():
+  """Get and print a histogram of the top 15 brand distribution for a search
+  query.
+
+  Histograms are created by using the "Facets" functionality of the API. A Facet
+  is a view of a certain property of products, containing a number of buckets,
+  one for each value of that property. Or concretely, for a parameter such as
+  "brand" of a product, the facets would include a facet for brand, which would
+  contain a number of buckets, one for each brand returned in the result.
+
+  A bucket contains either a value and a count, or a value and a range. In the
+  simple case of a value and a count for our example of the "brand" property,
+  the value would be the brand name, eg "sony" and the count would be the number
+  of results in the search.
+  """
+  client = build('shopping', SHOPPING_API_VERSION, developerKey=DEVELOPER_KEY)
+  resource = client.products()
+  request = resource.list(source='public', country='US', q=u'digital camera',
+                          facets_include='brand:15', facets_enabled=True)
+  response = request.execute()
+
+  # Pick the first and only facet for this query
+  facet = response['facets'][0]
+
+  print '\n\tHistogram for "%s":\n' % facet['property']
+
+  labels = []
+  values = []
+
+  for bucket in facet['buckets']:
+    labels.append(bucket['value'].rjust(20))
+    values.append(bucket['count'])
+
+  weighting = 50.0 / max(values)
+
+  for label, value in zip(labels, values):
+    print label, '#' * int(weighting * value), '(%s)' % value
+
+  print
+
+
+if __name__ == '__main__':
+    main()
diff --git a/samples/searchforshopping/pagination.py b/samples/searchforshopping/pagination.py
new file mode 100644
index 0000000..c938247
--- /dev/null
+++ b/samples/searchforshopping/pagination.py
@@ -0,0 +1,47 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Queries with paginated results against the shopping search API"""
+
+import pprint
+
+from apiclient.discovery import build
+
+
+SHOPPING_API_VERSION = 'v1'
+DEVELOPER_KEY = 'AIzaSyACZJW4JwcWwz5taR2gjIMNQrtgDLfILPc'
+
+
+def main():
+  """Get and print a the entire paginated feed of public products in the United
+  States.
+
+  Pagination is controlled with the "startIndex" parameter passed to the list
+  method of the resource.
+  """
+  client = build('shopping', SHOPPING_API_VERSION, developerKey=DEVELOPER_KEY)
+  resource = client.products()
+  # The first request contains the information we need for the total items, and
+  # page size, as well as returning the first page of results.
+  request = resource.list(source='public', country='US', q=u'digital camera')
+  response = request.execute()
+  itemsPerPage = response['itemsPerPage']
+  totalItems = response['totalItems']
+  for i in range(1, totalItems, itemsPerPage):
+    answer = raw_input('About to display results from %s to %s, y/(n)? ' %
+                       (i, i + itemsPerPage))
+    if answer.strip().lower().startswith('n'):
+      # Stop if the user has had enough
+      break
+    else:
+      # Fetch this series of results
+      request = resource.list(source='public', country='US',
+                              q=u'digital camera', startIndex=i)
+      response = request.execute()
+      pprint.pprint(response)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/samples/searchforshopping/ranking.py b/samples/searchforshopping/ranking.py
new file mode 100644
index 0000000..bf6dc0f
--- /dev/null
+++ b/samples/searchforshopping/ranking.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Query with ranked results against the shopping search API"""
+
+import pprint
+
+from apiclient.discovery import build
+
+
+SHOPPING_API_VERSION = 'v1'
+DEVELOPER_KEY = 'AIzaSyACZJW4JwcWwz5taR2gjIMNQrtgDLfILPc'
+
+
+def main():
+  """Get and print a feed of public products in the United States mathing a text
+  search query for 'digital camera' ranked by ascending price.
+
+  The list method for the resource should be called with the "rankBy" parameter.
+  5 parameters to rankBy are currently supported by the API. They are:
+
+  "relevancy"
+  "modificationTime:ascending"
+  "modificationTime:descending"
+  "price:ascending"
+  "price:descending"
+
+  These parameters can be combined
+
+  The default ranking is "relevancy" if the rankBy parameter is omitted.
+  """
+  client = build('shopping', SHOPPING_API_VERSION, developerKey=DEVELOPER_KEY)
+  resource = client.products()
+  # The rankBy parameter to the list method causes results to be ranked, in this
+  # case by ascending price.
+  request = resource.list(source='public', country='US', q=u'digital camera',
+                          rankBy='price:ascending')
+  response = request.execute()
+  pprint.pprint(response)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/samples/searchforshopping/restricting.py b/samples/searchforshopping/restricting.py
new file mode 100644
index 0000000..07a4474
--- /dev/null
+++ b/samples/searchforshopping/restricting.py
@@ -0,0 +1,43 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Query that is restricted by a parameter against the public shopping search API"""
+
+import pprint
+
+from apiclient.discovery import build
+
+
+SHOPPING_API_VERSION = 'v1'
+DEVELOPER_KEY = 'AIzaSyACZJW4JwcWwz5taR2gjIMNQrtgDLfILPc'
+
+
+def main():
+  """Get and print a feed of all public products matching the search query
+  "digital camera", that are created by "Canon" available in the
+  United States.
+
+  The "restrictBy" parameter controls which types of results are returned.
+
+  Multiple values for a single restrictBy can be separated by the "|" operator,
+  so to look for all products created by Canon, Sony, or Apple:
+
+  restrictBy = 'brand:canon|sony|apple'
+
+  Multiple restricting parameters should be separated by a comma, so for
+  products created by Sony with the word "32GB" in the title:
+
+  restrictBy = 'brand:sony,title:32GB'
+  """
+  client = build('shopping', SHOPPING_API_VERSION, developerKey=DEVELOPER_KEY)
+  resource = client.products()
+  request = resource.list(source='public', country='US',
+                          restrictBy='brand:canon', q='Digital Camera')
+  response = request.execute()
+  pprint.pprint(response)
+
+
+if __name__ == '__main__':
+    main()
