Announcements

Shopify Fund Update

  The Shopify Fund -- Shopify's million-dollar fund for encouraging developers to build apps on the Shopify platform…

 

The Shopify Fund -- Shopify's million-dollar fund for encouraging developers to build apps on the Shopify platform -- is in full swing, with the first set of developers to receive funding hard at work on their applications (and in one case, a book). Here's a quick recap of their projects:

We're going to start looking for the next set of apps to be funded soon, and I thought I'd let you know about the kinds of apps we're looking for:

  • Apps that integrate Facebook and Shopify: With 845 million monthly active users (425 million of whom are mobile), 1 in 2 North Americans being a Facebook user and Facebook accounting for 1 of every 5 web pages viewed, Facebook is a great place for shopowners to promote themselves and their shops, products and specials. We'd like to see more apps that bring together Facebook and Shopify, and especially those that make it easy for shopowners to set up a storefront on their Facebook pages. Mark Hayes recently wrote about these kinds of apps; check out his article titled How to Sell on Facebook to see examples of the sorts of apps we're looking for.
  • Customer image and text uploads: Many shops sell items that can be customized either with custom text (such as the customer's name on a sports uniform or a monogrammed towel) or photo (such as the customer's photo on a mug or t-shirt). Some shopowners have come up with manual workarounds such as following up via email with their customers to get the custom text or image. We'd love to see an app that automates the process.
  • Follow-up email: Here's a simple one, but it's an opportunity to get imaginative. There's a lot of call for an app that emails customers after they've place their orders, thanking them for shopping at the shop and providing extra information such as "If you have any questions or concerns about your order, here's an email address you can write to". Follow-up emails help keep shopowners in touch with the customers and can also be a great way to point customers to new products and events such as upcoming sales.
  • Rentals App: Shopify is great "out of the box" for selling products that you can ship to customers who will then own them, whether they're physical or digital. However, there are people in the business of loaning out rather than selling things. We'd like to see an app that lets people book things for rental, whether they're cars, computers or cooking equipment. Rental products can be mapped to products, but an app would have to take care of who's renting which item and when, and prevent things such as two customers renting the same thing at the same time.
  • Resource-Booking App: In a case similar to the one with the Rentals App (see above), there are people in the business of selling things that aren't shipped butbooked, such as: memberships (for gyms, clubs and all sorts of organizations), booking training and courses and services (such as catering, dog walking, housekeeping and so on). Resources such as these can be mapped onto products, but we'd like to see an app that helps take care of the extra stuff involved in booking resources, whether it's availability (such as the maximum size for a class, or the availability of a dog walker at a certain day and time).

If you've got an idea for an app and would like Shopify to fund its development, drop us a line at the Shopify Fund email address: fund@shopify.com. We're already looking around for apps to fund, so sooner is better!

Sound the Trumpets: OAuth2 Has Arrived!

App devs everywhere, rejoice! Shopify is pleased to announce that we’re replacing our current API authentication system with…


App devs everywhere, rejoice! Shopify is pleased to announce that we’re replacing our current API authentication system with one based on OAuth 2.0.

Anyone who knows anything about webapps will tell you that OAuth 2.0 is quickly becoming the de-facto standard for authenticating users against an API. Facebook, Foursquare, Google, Github, and other big names are already using it. We’ve been working on our own implementation here at Shopify for a while now, so we’re really pleased to finally make it public.

Why Use Oauth2?

Our previous authentication scheme was pretty good, but it lacked in some key areas. Primarily, it was completely custom and so the first thing a new dev would often have to do was implement our auth mechanism in their favourite environment. By implementing OAuth 2.0, developers can tie into existing auth solutions that implement the spec for them. We hope this makes getting stuck into the Shopify API much easier.

Secondly, we’re adding the ability to request granular access scope for your application. If you’ve ever used a Facebook or Twitter app, you’ve already seen this in action. We’ve divided up the API into a number of categories and apps can request read or write access to these individually. Now merchants won’t have to trust a product-related app with all their customer info for example. The available scopes are as follows:

  • Content: Blog posts, pages, comments, etc.
  • Themes: Themes and theme assets.
  • Products: Everything product-related. Images, variants, etc.
  • Customers: Customers and customer groups.
  • Orders: Orders, transactions, and fulfillments
  • Script Tags
  • Shipping: Coming Soon!

Related to this, you can also change the scopes you ask for as your app functionality evolves. You’ll need merchants to approve the changes of course, but it’s a lot more flexible. A full scope reference is available in our documentation.

What This Change Means

If you’re the owner of an app that uses the old auth system (i.e. everyone at the moment), don’t worry! The old system isn’t going to be going away any time soon. We're phasing it out eventually, but there will be lots and lots of notice before we do that.

One thing that is going to change is that new apps are going to be required to use Oauth 2.0 starting soon. We’re  leaving both options up for a short while so that the authors of our various community API clients have time to update their libraries but after that it’s Oauth all the way down.

Resources

We’ve updated our technical docs with new instructions on how to get up and running with the new auth scheme. Read this page throughly before you get started.

There’s already an updated version of the shopify_api gem available that works with Oauth 2.0. We’re working on converting the shopify_app gem as well as bringing our other official adapters up to date. There’s also an omniauth solution available here.

Feedback

We’d love to hear what you think of the new changes. You can leave a comment on this blog post or head over to our developer mailing list and discuss it there.

Shopify’s on Fast Company’s “The World’s 50 Most Innovative Companies” List! / You Should Work With Us

Shopify Makes Fast Company’s “50 Most Innovative Companies” List We’re in good company: along with Amazon, Square and…

Shopify Makes Fast Company’s “50 Most Innovative Companies” List

Fast Company / The World's 50 Most Innovative Companies - featuring Shopify

We’re in good company: along with Amazon, Square and Patagonia, Shopify made Fast Company’s “World’s 50 Most Innovative Companies” list in the “Retail” category. Here’s what they wrote:

For democratizing and automating ecommerce tools. Shopify offers pre-made templates that allow people to quickly and easily set up an online store without needing to know how to code a website. Shopify creates tools and templates to power online storefronts. (Notable clients include Rovio, Angry Birds’ parent company, and GE.) Shopify has grown to almost 20,000 storefronts in 88 countries, which did a combined $275 million in online sales, up from $120 million in 2010. Up next: Making it as easy to buy sell to mobile customers.

Join Us, It’s Bliss!

Shopify standard issue gear: Apple 27" display, MacBook Pro, Apple Wireless Keyboard, Aeron chair, Apple Magic Mouse, Bag O' Stuff

Even more Shopify standard issue gear: Light grey Shopify t-shirt, dark grey Shopify t-shirt, light grey Shopify hoodie, neat pen, Moleskine notebook, Godiva chocolates, $100 restaurant gift card, $50 Apple Store gift card

If making the Fast Company list doesn’t impress you, maybe my earlier article about why Shopify’s a great place to work will. From the company’s success to interesting projects to the way we get stuff done to the cool gear that’s standard issue for Shopify employees (see the photo above; you get to pick between a MacBook Pro and MacBook Air these days), there are reasons aplenty to hitch your wagon to Shopify’s star.

We’re looking to fill these positions right now:

Software Engineer, Applications
Ottawa, Ontario, Canada

Shopify is looking to hire a Software Engineer for our growing Applications Team. The Applications Team is responsible for building supported Shopify Applications for the Shopify App Store as well as 3rd party applications. If you are interested in working on challenging Ruby on Rails projects with a team of highly motivated and talented individuals then this position is for you.

Software Engineer, Billing
Ottawa, Ontario, Canada

Shopify is looking to hire a Software Engineer to maintain and extend our sophisticated SaaS billing platform servicing over 20,000 merchants. The Shopify billing system is a core piece of infrastructure that handles millions of dollars of financial transactions. If you are interested in working on challenging Ruby projects with a team of highly motivated and talented individuals then this position is for you.

[ This article also appears in Global Nerdy. ]

New SEO Features: Custom Page Titles and Product Image ALT Tags

Custom Page Titles When it comes to better ranking on search engine results, page title tags that include…

Custom Page Titles

When it comes to better ranking on search engine results, page title tags that include relevant key words can play a valuable part. This new feature lets you set a custom value on the <title> html tags of your shop's pages by replacing the default value of page_title in your shop's liquid templates. And because page_title already exists in all default Shopify themes, there's likely no need to make any changes to your templates to take advantage of it!

You can now set this custom value for the majority of your shop's content: products, collections, pages, blogs, and articles.

To set a title tag, go to the edit page of any product, collection, page, blog or article and click on "Modify title tag and url" to expand the form.

Now you'll be able able to set your title tag to a custom value.

From now on, this title tag value should replace the default title in the page_title liquid tag. To change it back, simply set the field to blank once again.

Here's an example of how to make use of the page_title within your template's theme.liquid <head>:

{% if template == 'index' %}
<title>{{ shop.name }}</title>
{% else %}
<title>{{ page_title }} | {{ shop.name }}</title>
{% endif %}

Product Image ALT Tags

We've also introduced another great new feature to the product admin tab that allows you to specify custom alt tags for each image.  alt tags help make your site's images more accessible to customers and can also help improve search engine results when using the image search feature on some search engines.


To use this feature, click on the edit alt text (or simply ALT with multiple images) link on the right hand side and enter your alt description.  Click the save button and you're done. The alt tag will now be available to all of your store's product image templates.  

If you're using a custom theme or an older template, you'll need to edit your template to include this new feature. Here's an example on how to use the new Liquid product image object in the product.liquid template: 

 {% for image in product.images %}
  <div class="thumbnail">
    <a href="{{ image.src | product_img_url: 'original' }}" title="{{ image.alt | escape }}">
      <img src="{{ image.src | product_img_url: 'thumb' }}" alt="{{ image.alt | escape }}" />
    </a>
  </div>
 {% endfor %}
  

Check out the wiki for the full description of the Image object.

For best results, try to be as concise and descriptive as possible and only describe the image itself. For more information on how to properly use alt tags, check out this blog post from the Google Webmaster Central Blog.

New Feature: Cart Permalinks

Have you ever wanted to link directly to the Shopify checkout with a specific cart already loaded? Cart…


Have you ever wanted to link directly to the Shopify checkout with a specific cart already loaded? Cart Permalinks allow you to do this easily.

This is what a cart permalink looks like:

http://store.shopify.com/cart/70881412:1,70881382:1

Visiting a cart permalink takes you directly to the first page of the checkout with the specified variant ids and quantities. Any cart that is currently in the session will be completely untouched and ignored.

The format of the url is:

http://shopname.com/cart/#{variant_id}:#{quantity}(,...)

Notes, cart attributes, and tracking parameters can be added as query parameters like usual. If customer accounts is enabled, and the user is not logged in, they will see the login page before reaching the checkout.

This feature is useful for things like putting "Buy it now" buttons on blogs, sending reorder links, and selling comic prints (like in the above image from Penny Arcade).

Introducing Shopify Experts

What is Shopify Experts? Shopify Experts is an online directory of ecommerce experts who can help you get…

Screenshot of the "Shopify Experts" main page

What is Shopify Experts?

Shopify Experts is an online directory of ecommerce experts who can help you get started with your Shopify shop, make it look and work better and get the most out of it. It’s where you can go to find designers to build themes, developers to make custom apps, marketers to boost your sales and other people with the skills, know-how and experience to help you with all things Shopify.

With over 16,000 shops powered by Shopify and more and more being added to that number each day, it’s not surprising that a community of experts who’ve mastered the in and outs of designing, customizing, running and promoting an online shop has grown around Shopify. Shopify Experts makes it easy for shopowners to find these people and tap into their expertise.

I want to hire a Shopify Expert to help me with my shop. What do I do?

That’s easy: just go to the Shopify Experts site at experts.shopify.com and start looking around! We’ve designed the site so browsing through experts, whether designer, developer, marketer or something else, is as easy as browsing through a Shopify shop’s catalog.

You can browse through our entire catalog of experts or search by area of expertise, geographic location and price…

Search controls for Shopify Experts: "I'm looking for a Developer in New York for a max of Any Price"

…and you’ll see a listing of experts that tell you who they are, what they do, where they’re located, thumbnails of their portfolio and a rough figure of how much they charge.

Screenshot of results from a Shopify Experts search

You can click on any expert’s View Expert Profile button to get a more in-depth view of what they do, see their experience with the Shopify platform, read reviews from shopowners who’ve hired them, see more of their portfolio and contact them.

Screenshot of a profile page for a Shopify Expert

Right now, you can find designers, developers and marketers in Shopify Experts. We’re going to expand the categories soon to include photographers, accountants, legal assistance and more.

We’re making it easy to find the help you need to make your shop successful.

I have design/development/marketing skills and want to be listed in Shopify Experts. What do I do?

To join Shopify Experts, you need to:

I’m thinking about becoming a Shopify Expert. Is it worth it?

Woodcut artwork of a hand pointing to the leftWe think it’s worth it. Everyone at Shopify, from the development team to sales and marketing to support and Gurus, treat Shopify Experts as the go-to people. If you ask any of us for a recommendation for a developer, designer, marketer or other person to help you with your shop, we’ll direct you to a Shopify Expert. It only makes sense: Shopify Experts are by definition people we’ve vetted and have proven track records.

Shopowners think it’s worth it. In Shopify Experts’ four-week beta period, which we ran quietly, without any marketing, there were nearly 1,000 shopowner-to-Expert communications. Shopowners want your expertise, and Shopify Experts is how they’ll find you.

Shopify Experts think it’s worth it. Here’s what some Experts who participated in our beta program had to say:

“Since the day Experts soft-launched I've received at least a handful of enquiries a week. All of them have been excited, about setting up their online presence, and about using Shopify to do it. I've been loving it! I have one full project done and paid, two more are mid-way through and I am discussing several others.”

“Connecting shop owners with Shopify experts is yet another brilliant idea from Shopify. Experts bridges the gap, making it that much easier for shop owners to find help and for contractors like myself to find Shopify projects. In the first few weeks of it's release alone I was contacted 50% more than usual through the experts website. As always, I love everything about Shopify and this is just another feature that customers will benefit from as well as designers, developers, etc.”

“Shopify Experts has brought about a significant increase in enquires since the beta launch. I have received approx 30 requests for quotes, ranging from small theme updates to larger projects that cover branding, design and quite complication integrations. I have closed on several projects already, generating in the region of $18,000 worth of business. Not bad for a 4 week beta(!)”

Sign up now!

Monitor displaying the Shopify Experts page

Shopify Experts is now out of beta and in full swing. If you’ve got expertise that Shopify shopowners need, sign up, get listed and get found!

[ This article also appears in Global Nerdy. ]

Write a Shopify/Twilio App and Win a MacBook Air, LEGO Mindstorms or a Kindle Fire!

Shopify and Twilio are Holding a Contest! Shopify, the ecommerce platform that makes it easy to set up…

"Shopify/Twilio Developer Contest": 1960s photo of a woman at a "futuristic" computer console

Shopify and Twilio are Holding a Contest!

Shopify, the ecommerce platform that makes it easy to set up online shops, is teaming up with Twilio, the platform for voice-over-phone, voice-online and SMS messaging, to create a developer contest where you’re challenged to write an app that makes use of both platforms.

Perhaps it’s an app that phones customers or sends them an SMS message when their order has been shipped. Or voice notification to a bricks-and-mortar store that tells the staff that a customer is coming to pick up their order. With a little creativity, some coding and our APIs, you can write an app that’s both useful and cool enough to win one of our prizes…

The Prizes

First prize: Macbook Air and Apple Cinema Display

First prize is from Shopify: it’s Edward from Shopify’s preferred rig! A hot-rodded 11-inch Macbook Air with 256GB solid-state drive and 1.8 GHz CPU along with a gigantic 27-inch Apple Cinema Display. Small and light for when you’re on the go, a nice big screen for when you’re at home, the office of wherever you decide to keep the display and plenty of horsepower to build apps.

Second prize: Lego Mindstorms robot

Second prize comes from Twilio and it’s a robot hacker’s dream: a stacked LEGO Mindstorms swag bag with the NXT 2.0, a bundle of touch, light and sound sensors, and a Bluetooth dongle to keep your creations connected. I, for one, welcome our new LEGO robot overlords.

Third prize: Amazon Kindle Fire

Third prize is a joint Shopify/Twilio effort: a Kindle Fire, the newest multi-touch full-color hotness from the world of ebook readers.

The Rules

We try to keep things simple – it’s about building cool apps, not being buried in regulations!

Okay, How Do I Get In on This Action?

This article also appears in Global Nerdy.

Application Proxies: The New Hotness

I’m pleased to announce a brand new feature that we recently added to the Shopify API: Application Proxies.…

I’m pleased to announce a brand new feature that we recently added to the Shopify API: Application Proxies. These will allow you do develop all kinds of crazy things that weren’t possible before, and we’re really excited about it. Let me explain.

What’s an App Proxy?

An App Proxy is simply a page within a Shopify shop that loads its content from another location of your choosing. Applications can tell certain shop pages that they should fetch and display data from another location outside of Shopify.

The really cool thing about the implementation we’ve put together is that if you return data with the application/liquid content-type we’ll run it through Shopify’s template rendering engine before pushing it out to the user. This allows you to create dynamic native pages without having to do anything crazy with iframes. I’ll explain this in more detail later.

How Do I Set This Up?

We have a great App Proxy tutorial over on our API docs that takes you through the steps, but I’ll summarize them here too.

The first thing you need to do is set up the path that should be proxied and where it should be proxied to. This is done from your app’s configuration screen on the Partners dashboard.

Once you’ve done that, you’ll need to work out what data you’re going to return when the specified URL is hit. You can return anything you want but for now we’re going to show some very simple stats to get the ball rolling.

All my examples assume that you’re using the shopify_app gem as a starting point, but the topics I cover translate directly to all languages.

Before we do anything else we need a controller to handle the calls. I generated a ProxyController class and mapped /proxy to hit its index method. I also created a template to render the response.

Here’s the controller:

class ProxyController < ApplicationController
  def index
  end
end

And here’s the template:

<h1>Hello App Proxy World</h1>

Really easy so far. Now we can start our rails app and visit the proxied page in a browser. It should look something like this:

Not much to see here just yet. In fact, it looks nothing like our shop. Let’s do something about that.

What we want is for shopify to render the page just like it were any other native data using the Liquid engine. We tell Shopify to do this by setting the content-type header on our response to application/liquid. At the same time we’re going to tell rails not to use its own layouts when rendering the page.

Add this line to the index method in ProxyController

render :layout => false, :content_type => 'application/liquid'

Now save and reload the page. Tada! Here’s what you’ll see:


Good, eh?

Next Steps

Static text is all well and good, but its not very interesting. What we really want here are some stats. I’ve chosen to display the shop’s takings as well as a link to the most popular product for the last week.

Now that we’re trying to access shop data we need to figure out which shop is sending us the request in the first place. Fortunately the url of the shop is one of the GET parameters on the request, so we can grab that and use it to configure our environment to make API calls. Details on how to do this are documented here, so go set that up and then come back when you’re done. I’ll wait.

Back? Excellent. Let’s put some info into our response. here’s what your ProxyController should look like now:

class ProxyController < ApplicationController

  def index
    ShopifyAPI::Base.site = Shop.find_by_name(params[:shop]).api_url

    @orders = ShopifyAPI::Order.find(:all, :params => {:created_at_min => 1.week.ago})
    @total = 0

    @product_sale_counts =Hash.new()

    @orders.each do |order|
      order.line_items.each do |line_item|
        if @product_sale_counts[line_item.product_id]
          @product_sale_counts[line_item.product_id] = @product_sale_counts[line_item.product_id] + line_item.quantity
        else
          @product_sale_counts[line_item.product_id] = line_item.quantity
        end
      end 
      @total += order.total_price.to_i
    end

    top_seller_stats = @product_sale_counts.max_by{|k,v| v}
    @product = ShopifyAPI::Product.find(top_seller_stats.first)

    @top_seller_count = top_seller_stats.last

    render :layout => false, :content_type => 'application/liquid'
  end
end

And here’s the template:

<h1>This Week's Earnings</h1>
<p><%= number_to_currency(@total)%> from <%= @orders.count%> orders</p>
<h1>Top Seller: <%= link_to(@product.title, url_for_product(@product)) %></h1>
<p>This product sold <%= @top_seller_count %> units</p>

Here's the finished product. The CSS could use some work, but all our info is there and matches the theme perfectly:

A Word On Security

So far so good, but right now there’s no security on our proxy. Anyone sending a request to that url with a ‘shop’ parameter will get data back. Oops! Let’s fix that.

Just like our webhooks, we sign all our proxy requests. There are details in the API docs on exactly how this is done, but for simplicity’s sake just add this private function to your ProxyController and add it as a before_filter:

def verify_request_source
  url_parameters = {
    "shop" => params[:shop],
    "path_prefix" => params[:path_prefix],
    "timestamp" => params[:timestamp]
  }

  sorted_params = url_parameters.collect{ |k, v| "#{k}=#{Array(v).join(',')}" }.sort.join

  calculated_signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha256'),
  ShopifyAppProxyExample::Application.config.shopify.secret, sorted_params)

  raise 'Invalid signature' if params[:signature] != calculated_signature
end

Great! Now you can be sure that Shopify is the one sending you this data and not some dirty impostor.

There you have it. Application Proxies are a great way to introduce dynamic third-party content into a native shop page. There's a lot more that you can do with them, far too much to cover in a single blog post.

If you're interested I encourage you to set up a quick app and give them a try. You can also discuss potential ideas with other developers on our dev mailing list.

50 Cent is Now on Shopify!

Curtis Jackson, the rapper better known to the world as “Fitty Cent”, has a company called SMS Audio…

Curtis Jackson, the rapper better known to the world as “Fitty Cent”, has a company called SMS Audio and they launched their Shopify-based shop today. The shop is called SMS By 50 and it’s the go-to place for premium headphones.

Headphones offered by SMS By 50: Earbuds, wired and wireless

The headphones come in three flavours: wired, wireless and earbuds. They’re currently available for pre-sale and range in price from $129.95 to $399.95, which is “right in line with current market trends” according to this TechCrunch article. SMS Audio recently bought KonoAudio, who’ve been making funky high-end headphones for ages, presumably for their headphone manufacturing expertise, which will be backed by Fitty’s street cred.

SMS By 50 T-shirt and Cap

In addition to headphones, SMS By 50 also carries shirts and caps, suitable for just plain old hangin’ or hittin’ da club.

Screen capture of the main page of the SMS By 50 shop

If you’re working on your own Shopify shop or designing Shopify themes, give SMS By 50 a look. It’s got a great design whose look and feel works for its audience; it also shows you how flexible Shopify’s templating system is.

Oh, and by the way, if you think you’re not “street” enough to sport “Fitty” gear, here’s something just for you:

The Shopify API: Now with 3 times the call limit!

Last month we announced the removal of our global API limit, which was hampering the growth of some…

Last month we announced the removal of our global API limit, which was hampering the growth of some of our larger apps. Today I have some more good news: The per-shop limit has been raised from 300 calls every 10 minutes to 500 calls every 5 minutes. This works out to a 3(-and-a-bit)-fold increase over the previous number, and should accommodate the vast majority of apps.

The best part about this announcement is that the change has already been rolled out, and you should see the new numbers appearing in the HTTP_X_SHOPIFY_SHOP_API_CALL_LIMIT header in our API responses.

We're in the process of updating our docs to reflect this change, but if you see any references to the old numbers on the wiki feel free to swap them out for the new ones or just ping me about it if you're lazy :)

Start your free 30 day trial!

Create an online store in minutesTry Shopify