Bulk Custom Brick Model Sets for Events, Promotions and Brand Activations

You pay once for the design. After that, you can order as many sets as your project requires. That’s the commercial logic behind this service and it’s why it works so well for businesses that need volume without sacrificing quality or personalisation. One brief, one design process, one approval, and then a production run of ten, a hundred, or a hundred thousand sets delivered anywhere in the world.

Here’s what the service covers and how to get a bulk order started.

What this service is for

Bulk brick model set orders suit any occasion where you need a custom branded or personalised product at volume. That covers product launches where you want to give every attendee or key client something they’ll actually keep, trade shows and conferences where you need a giveaway that genuinely stands out, brand activations where the model becomes part of the campaign itself, and corporate gifting programmes where the same model needs to be produced for an entire team or client list. The common thread is that a single custom design gets reproduced at whatever quantity the project requires, with every set packed individually and shipped to wherever it needs to go.

The unifying factor across all of these is that a single custom design gets reproduced at whatever quantity the project requires, with every set packed individually and shipped to wherever they need to go. It’s a scalable product with a bespoke feel, which is a combination that very few other gifting or promotional options can offer.

How the pricing model works

The design fee is a one-off cost. Once the model is designed, approved, and ready for production, the cost per set is determined by the parts required to build it and the packaging specification you choose. Larger quantities reduce the cost per set, so the more you order the more cost-effective each individual unit becomes.

Every project is quoted individually because every model and every quantity is different, but you’ll always have a full itemised quote before committing to anything. There are no hidden costs and the pricing is transparent from the first conversation.

What’s included in every bulk order

Every set in a bulk order contains the same core elements regardless of quantity. All the parts needed to complete the build are individually counted, checked, and packed into the box. Building instructions are included in every set, either as a digital QR code card or as a printed booklet depending on which format you choose at the quoting stage. The digital option is the more eco-friendly choice and the one most corporate clients go for, with each box containing a business card-sized card carrying a photo of the finished model and a QR code linking directly to the step-by-step instructions online.

For packaging, you choose between plain cardboard boxes and fully custom printed boxes designed in house to a professional standard. Custom printed boxes are the right choice for brand activations, product launches, and any occasion where the unboxing experience is part of the impact. The box artwork is designed and produced in parallel with parts sourcing, so both are ready at the same time and there are no delays at the end of the project.

Projects we’ve delivered

A corporate client wasn’t quite sure what they wanted but had a few thoughts which lead to us supplying a bulk order of 100 walls with their company logo printed on the front and their company motto on the back. We designed the model, supplied the parts, printed the graphics on to the parts and shipped them to their door in 2 weeks.

A business marking a significant company anniversary ordered a branded display model produced in quantity for every senior team member across multiple offices worldwide. The model was small but it had a big impact!

Each of these projects started with a brief, went through a single design and approval process, and was then produced at whatever quantity the client needed. The model was designed once and the production scaled to meet the requirement. That’s the efficiency this service is built around.

Multi-location and international delivery

For bulk orders that need to be distributed across multiple addresses, whether that’s different offices, individual team members, or clients in different countries, we handle the full delivery logistics as part of the project. Every set is individually packed and can be shipped to separate destinations worldwide. Shipping costs are included in your quote upfront so there are no unexpected charges when the order goes out.

We are experienced with handling deliveries working with premium couriers to ensure you receive your order problem free. No matter where you are, we handle the whole process, pre-paying customs fees so all you need to do is be excited to receive your custom designed sets!

Custom brick printing for bulk orders

If your bulk order calls for a specific branded element on a particular part, a tile with a company logo, a brick printed with a campaign graphic, or any other custom graphic on a specific piece within the set, our custom brick printing service integrates directly into a bulk commission. The printed parts are included in the set alongside everything else and packed with the rest of the order. It’s one brief, one process, and one delivery.

How to get a bulk order started

Get in touch with a description of what you want built, what the occasion is, your approximate quantity, and any reference material you have. We’ll review what you’ve sent and come back with next steps. If we need more detail before we can quote accurately, we’ll suggest a short call to make sure we’ve understood everything correctly before putting the quote together.

Once the design is approved, we handle everything through to delivery. You don’t need to manage the production, the parts sourcing, the packaging, or the logistics. That’s all handled by us.

Frequently asked questions

Is there a minimum order quantity for bulk sets?

No. You can order a single set or a production run of thousands. The design fee applies regardless of quantity, and larger orders reduce the cost per set. There’s no minimum that rules out smaller runs.

Can the same model be reordered later?

Yes. Once a model is designed and approved, the design is retained and can be reproduced at any point. If you want to reorder the same model at a later date, you don’t pay the design fee again.

Can each set be personalised differently for individual recipients?

Personalisation across a bulk run, such as individual names or different messages on each set, is possible depending on the type of personalisation required. Include your requirements at the enquiry stage and we’ll advise on what’s achievable and factor it into the quote.

Do you use genuine bricks?

We build primarily with genuine, brand-name bricks. Where a project calls for it, we also work with a trusted supplier of high-quality compatible bricks. Either way, the standard of the finished model remains the same.

How long does a bulk order take?

Turnaround depends on the model complexity, the quantity, and the packaging specification. We recommend getting in touch as early as possible if you have a firm delivery date. For most bulk orders, 6 to 8 weeks is a realistic starting point, with larger orders it may take longer but this will all be discussed when we provide you with the quote.

Can you ship to multiple addresses?

Yes. We handle multi-location delivery as part of the order. Every set is individually packed and can be shipped to separate addresses worldwide. Include your delivery requirements at the enquiry stage and we’ll factor them into the quote.

Do you ship internationally?

Yes, worldwide. Shipping is included in your quote upfront so there are no unexpected charges at the point of delivery.

Get your bulk brick model order started

If you’ve got a product launch, an event, a gifting programme, or a brand activation coming up and you want something that people will actually keep, get in touch with your brief and we’ll take it from there.

Need a single custom model instead? Find out about our custom brick model kit service or browse all our services.

<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