matt@bellevebricks.com

Belle-Ve Bricks

Building Brands, Brick by Brick.

top=tips=selling on bricklink
top=tips=selling on bricklink

Sell With Great Succes on Bricklink (Complete Guide)

Create Your

We help you from start to finish to create and deliver your tailor-made custom model.
Custom model
Continue

When you’re looking to sell LEGO® on Bricklink, there are a few things to keep in mind to ensure your success. There are many different factors that can affect the value of a set, bricks, or parts, such as its rarity, completeness, or condition. It’s important that you do your research and learn to know the difference between these factors and how they affect the value of what you are selling.

We will take a look at the best tips to become successful selling on Bricklink

How To Sell on Bricklink (Step by Step)

1. Set up Your Account on Bricklink

If you do not have a Bricklink account already go to Bricklink and click the login or register button at the top right, you will see a form like this pop-up, just fill it in and submit.

If you have a Bricklink account already congratulations you are halfway there.

To get a seller account, Bricklink will expect you to have an active account with at least one positive feedback. 

Beware though, Bricklink doesn’t mess around, be prepared to send a picture of yourself, photo ID, proof of address, and proof of inventory.

If you already have an account, you can go straight ahead and set up your store shipping methods and add some items to your inventory (providing you have some LEGO® to sell that is). After this, you will need to wait for verification.

Do note that your store by default is closed until your store settings and information has been verified by Bricklink.

2. Know Your Goals Selling on Bricklink

Go big or go home?

With Bricklink it helps to have a lot of different types of bricks when it comes to selling LEGO, but it doesn’t necessarily have to be that way if you aren’t trying to make a living from it.

I have always found the biggest challenge when it came to selling LEGO® was time and space. Sorting through individual LEGO® pieces takes a long time, even if you are the most organized person in the world. I am not going to lie, it’s a very repetitive and tedious task!

If you have mixed LEGO® from your collection or some that you bought in bulk, you will need to be prepared to spend hours upon hours cleaning, sorting, cataloging, and adding the LEGO® to your store’s inventory.

If this doesn’t sound appealing, you can make it simpler. Watch for deals and when you find a good one, use the Bricklink part-out feature to work out the profit.

When selling LEGO® using the part-out feature makes it far easier, you still have to catalog the pieces, but you can add them all to your inventory in one go with a few clicks of the mouse.

3. Selling LEGO® Takes up a Lot of Room!

This really goes hand in hand with the goals you set.

If you want to make a living out of selling LEGO, it’s recommended you have a minimum of 500k in your inventory at any given time.

Now imagine the amount of space you would need to be able to sort, organize and store that many LEGO® pieces. Let’s be honest you are going to say goodbye to a room in your house!

Do remember that your store can be as big or small as you can manage, if you want to do this on a smaller scale you can just work with what space you have. Just keep replenishing your stock. 

One last note on this point, it is even more important to keep organized if space is an issue for you. You will soon find yourself in a confusing mess if you cannot find the bits you need when an order comes in.

selling-lego-bricks-sorting

4. Selling LEGO® Means You Need to Keep Things Organised!

When it comes to sorting your LEGO, you will want to be efficient with your time.

The last thing you want is to be unorganized and make a sale only to find you cannot find some of the pieces!

Some people use Tupperware boxes, some takeaway boxes (new ones, not ones that smell of Chinese food!) or you can get organizer units with separate drawers that you can label with a reference number, which can be entered against your parts in your Bricklink inventory.

A label maker will be your best friend here, agree on a future-proof way that will allow you to catalog them. Even just doing something like AA01, AA02, etc will do fine assuming you reference it on Bricklink perfectly.

Congratulations you are ready for your first order, if you have done this correctly the invoice will tell you which drawer you need to get the parts out of to fulfill the order, as simple as that!

5. Keep Enough Stock Levels

Once you have decided whether you will concentrate on new sets, bulk LEGO® hauls, mini-figures only, or perhaps a mixture of all three you are going to need to do one thing, BUY LEGO!

It is important that you keep an eye out for deals on new sets online, in supermarkets, on Facebook, on eBay, and just generally anywhere that sells LEGO® (new or old).

If you are just interested in bulk buys then places like boot sales and Facebook will be your best friend, but be prepared to travel.

Here’s a list of places I would advise you to keep an eye on to keep your stock levels up!

  • Amazon
  • eBay
  • Facebook
  • HotUKDeals
  • Boot sales
  • Garage Sales

6. Take Time to Set Up Your Shipping Rules

If you want to increase your conversion rate, I cannot stress how important it is that you take the time to properly set up your shipping rules.

The aim here is to put in the necessary fees and rules so when someone comes to buy from your store that they can do it without having to request a quote.

For example, here are some of the rules from my very own store. It took a lot of trial and error tailoring it so hopefully, this gives you an idea of what to do.

selling-lego-bricklink-shipping-rules

7. Use Quality Packing for Your Products

If you treat every sale as though it was your own, you are going to do okay.

Would you be happy if you had saved up, and bought that one set you were after for months (or years) and when you receive it from the Bricklink seller it’s all bashed and crushed as they didn’t package it properly?

The answer is going to be a massive NO, isn’t it?

Make sure you stock up on parcel bags, cardboard boxes (even if it’s ones from the local supermarket that they throwing them away), small bags, and parcel tape.

Examples of the basic packing material you will want are:

  • Tape gun to make it quicker and easier to seal Boxes

  • Parcel or Packing Tape (I advise the clear one as you do not have to worry if you cover delivery notes etc)

  • Cardboard boxes in various sizes
  • Bubble wrap, lots of it!
  • Parcel bags in various sizes
  • Resealable grip lock bags (these are perfect for Mini-figure
  • And those smaller orders

How Much Are BrickLink Paypal Fees?

At the current time of writing the BrickLink Paypal Fees are …

Conclusion

Bricklink is an amazing platform that allows hobbyists or business owners to sell LEGO® sets or individual bricks, parts, and Mini-figures. As someone who loves LEGO® Bricklink allows AFOLs such as myself to be able to easily buy the bricks I need when venturing outside the realm of official LEGO® sets.

 It is very possible to be successful on Bricklink but you do have to make sure you have a constant arsenal of inventory which you can get from breaking down LEGO® sets or getting your hands on large hauls.

I hope this blog helps you get started with your soon-to-be successful LEGO® business, we would love to hear about your experiences selling LEGO® in the comments below!

Have you ever wondered why LEGO® sets come with extra pieces? Can this help with your LEGO® Bricklink store cashing in on the extra pieces? Read our blog post “Why Do LEGO® Sets Always Come With Extra Pieces” to learn more.


<div class="badge-base LI-profile-badge" data-locale="en_US" data-size="large" data-theme="dark" data-type="HORIZONTAL" data-vanity="ferdi-vol" data-version="v1"><a class="badge-base__link LI-simple-link" href="https://www.linkedin.com/in/%E2%9C%85-ferdi-vol-corporate-gifts/?trk=profile-badge"></a></div>
/* Auto generated, hash = 5dceu9kevqjdyuy2uw1atqrsu */
//TODO: Break this file down so that we can actually unit test it.
(function(window) {
  /**
  * Renders all unrendred LinkedIn Badges on the page
  */
  window.LIRenderAll = function () {
    var CALLBACK_NAME     = 'LIBadgeCallback', //Must match callback on helpers.js
        BADGE_NAMES       = '.LI-profile-badge, .LI-entity-badge',
        // TODO -- tracking param for other badge types
        TRACKING_PARAM    = 'profile-badge',
        responsesReceived = 0, //Keeps track of number of responses recieved for proper cleanup when finished
        expectedResponses = 0, //Keeps track of number of responses to expect
        scripts           = [ ], //Keeps track of scripts added for proper cleanup when finished
        childScripts      = {}, //Keeps track of child scripts to render
        badges            = Array.prototype.slice.call(document.querySelectorAll(BADGE_NAMES));

    var i, len, badge, rendered;
    for (i = 0, len = badges.length;  i < len; i++) {
      badge    = badges[i];
      rendered =  badge.getAttribute('data-rendered');
      if (!rendered) {
        expectedResponses++;
        badge.setAttribute('data-rendered', true);
        renderBadge(badge);
      }
    }

    function isCNDomain() {
      if (typeof window !== "undefined") {
        var hostName = window.location && window.location.hostname ||  '';
        return (/linkedin(-ei)?.cn$/).test(hostName);
      }

      return false;
    }

    function generateUrl(isEI) {
      var domainPrefix = isEI ? 'https://badges.linkedin-ei' : 'https://badges.linkedin';
      if (isCNDomain()) {
        return domainPrefix + ".cn/";
      }

      return domainPrefix + ".com/";
    }

    function getBadgeKeyQueryParams(badge) {
      return Array.prototype.slice.call(badge.attributes).filter(function (attr) {
        return attr.name.lastIndexOf('data-key-', 0) !== -1;
      }).map(function (attr) {
        // Most browsers automatically lowercase the attribute name when its being read
        // We are calling lowercase on it again to ensure consistency for any browsers that are lagging behind.
        return encodeURIComponent(attr.name.replace('data-', '').toLowerCase()) + '=' + encodeURIComponent(attr.value);
      });
    }

    /*
    * Renders a single badge on the page
    * @param badge: div element of badge to render
    */
    function renderBadge(badge) {
      var size       = badge.getAttribute('data-size'),
          locale     = badge.getAttribute('data-locale'),
          type       = badge.getAttribute('data-type'),
          theme      = badge.getAttribute('data-theme'),
          vanity     = badge.getAttribute('data-vanity'),
          version    = badge.getAttribute('data-version'),
          isEI       = badge.hasAttribute('data-ei'),
          entity     = badge.getAttribute('data-entity'),
          isCreatePage = badge.hasAttribute('data-iscreate'),
          uid        = Math.round(1000000 * Math.random()),
          baseUrl = generateUrl(isEI),
          queryParams = [
            'locale=' + encodeURIComponent(locale),
            'badgetype=' + encodeURIComponent(type),
            'badgetheme=' + encodeURIComponent(theme),
            'uid=' + encodeURIComponent(uid),
            'version=' + encodeURIComponent(version)
          ],
          url;

      if (version === 'v2') {
        baseUrl += 'view';
        queryParams.push('badgesize=' + encodeURIComponent(size));
        queryParams.push('entity=' + encodeURIComponent(entity));
        queryParams = queryParams.concat(getBadgeKeyQueryParams(badge));
      } else {
        baseUrl += 'profile';
        queryParams.push('maxsize=' + encodeURIComponent(size));
        queryParams.push('trk=' + encodeURIComponent(TRACKING_PARAM));
        queryParams.push('vanityname=' + encodeURIComponent(vanity));
      }

      if (isCreatePage) {
        queryParams.push('fromCreate=true');
      }

      url = baseUrl + '?' + queryParams.join('&');
      badge.setAttribute('data-uid' , uid);
      jsonp(url); //Calls responseHandler when done
    }

    /**
    * Handles a response from the server. Finds badge matching badgeUid and inserts badgeHtml there
    * @param badgeHtml: String representing contents of the badge
    * @param badgeUid: UID of the badge to target
    **/
    function responseHandler(badgeHtml, badgeUid) {
      responsesReceived ++;

      var i, badge, uid, isCreate;
      var defaultWidth = 330 // max possible width
      var defaultHeight = 300 // max possible height

      for (i = 0, len = badges.length; i < len; i++) {
        badge = badges[i];
        // isCreate needed to prevent reloading artdeco script tag
        isCreate = badge.getAttribute('data-iscreate');
        uid   = parseInt(badge.getAttribute('data-uid'), 10);
        if (uid === badgeUid) {
          var badgeMarkup = `<body>${badgeHtml}</body>`
          var iframe = document.createElement('iframe');
          iframe.onload = function() {
            var iframeBody = iframe.contentWindow.document.body;
            // 5 px buffer to avoid the badge border being cut off.
            iframe.setAttribute('height', (iframeBody.scrollHeight || defaultHeight) + 5);
            iframe.setAttribute('width', (iframeBody.scrollWidth || defaultWidth) + 5);
          };
          iframe.setAttribute('frameBorder', '0');
          iframe.style.display = 'block';
          badge.appendChild(iframe);
          iframe.contentWindow.document.open();
          iframe.contentWindow.document.write(badgeMarkup);
          iframe.contentWindow.document.close();
          replaceScriptTags(badge, isCreate);
        }
      }
      tryClean();
    }

  // These functions are needed because badge markup is added via innerHtml property which does not run script tags
  function replaceScriptTags(node, isCreate) {
    if (shouldReplaceNode(node, isCreate)) {
      node.parentNode.replaceChild(cloneScriptNode(node), node);
      childScripts[node.src] = true;
    } else {
      var i = 0,
          children = node.childNodes;
      while (i < children.length) {
        replaceScriptTags(children[i++], isCreate);
      }
    }
    return node;
  }

  function shouldReplaceNode(node, isCreate) {
    return isScriptNode(node) && !childScripts[node.src] && (!isCreate || (isCreate && !node.getAttribute('data-isartdeco')));
  }

  function isScriptNode(node) {
    return node.tagName === 'SCRIPT';
  }

  function cloneScriptNode(node){
    var script  = document.createElement("script");
    for( var i = node.attributes.length-1; i >= 0; i-- ) {
      script.setAttribute( node.attributes[i].name, node.attributes[i].value );
    }
    return script;
  }

    // Gets all incoming responses
    window[CALLBACK_NAME] = responseHandler;

    /**
    * Tries to clean added tags
    **/
    function tryClean() {
      //Clean up after all requests are done..
      //Accounts for people including script more than once
      var done = (responsesReceived >= expectedResponses && expectedResponses > 0) || responsesReceived >= badges.length;
      if (done) {
        delete window[CALLBACK_NAME];

        // remove all script tags
        scripts.map(function(script){
          document.body.removeChild(script);
        });

      }
    }

    /*
    * Makes Jsonp request, responses handles by CALLBACK_NAME
    * @param url String: url of server to make request to
    */
    function jsonp(url) {
      var script = document.createElement('script');
      script.src = url;
      scripts.push(script);
      document.body.appendChild(script);
    }
  };

  if (document.readyState === 'complete') {
    window.LIRenderAll();
  } else {
    window.addEventListener('load', window.LIRenderAll, false);
  }

})(window);
Popular Posts