Celigo named a Visionary in the 2024 Gartner® Magic Quadrant™

On Demand Webinar

Ins and Outs of Integrating Shopify and Acumatica – Register

Watch Now

Today, Shopify is one of the most popular ecommerce storefronts with wide adoption among Acumatica users. For organizations that utilize Shopify and Acumatica, integration can help scale operations while improving the overall experience for both employees and customers. Automation through integration enables fast order fulfillment and refunds processing, an accurate view of orders, and better sales data for accounting and financial planning.

In this webinar, we share our expertise and discuss the following topics around automating business processes with Shopify and Acumatica:

  • Benefits of integration
  • Common integration use-cases
  • Best practices
  • Celigo’s Shopify – Acumatica Integration Solution
  • And much more!
Full Webinar Transcript

okay. Hello everyone. Thank you for joining our webinar today. I hope you’re all staying healthy and well during these times.

My name is Ebru and I work in product marketing at Celigo. I also have had some experience with end-to-end e-commerce operations. I ran my own small business for more than five years and sold on multiple e-commerce channels including Shopify, and today I’m here with Mannan, who’s our integration expert for Celigo’s e-commerce solutions. So this webinar is being recorded and you will get a copy of the recording after this session. If you have any questions, please submit them through the chat window, and we’ll be answering them at the end of this session. Okay. So let’s start by first providing some background on Celigo.

We are an iPaaS Integration Platform as a service company. So iPaaS [inaudible] how applications are integrated across an organization, and we ‘ve been around for nearly a decade helping thousands of customers with their e-commerce integrations, and Celigo is also a well-recognized company. It has been in the Gartner [Major?] Quadrant for the past couple of years and also Celigo is a G2 iPaaS leader, and our Acumatica integrations are all certified by Acumatica meeting all their requirements and delivering the highest level of quality, and Celigo’s iPaaS is unique in a way that it makes integration accessible for everyone, and we’ll talk more about these in the next slides. So on the platform, you can basically connect any application to any other application. It is possible to automate entire e-commerce business processes end to end by passing on key data at gross applications through integrations. And so examples are updating product listings across marketplaces, storefronts, receiving orders, processing of payments, fulfillment of orders, sending out notifications to customers, updating accounting books, and [inaudible] records. So all of these can be automated through integration. So some of the popular Acumatica use cases for e-commerce we see are connecting Acumatica with Shopify, Acumatica to Amazon, and today will focus on the Acumatica Shopify integration. So before we move on, a bit more detail on the platform. So the platform is built to be used by both business and technical users. We offer prebuilt templates to get you quickly started with integrations, and the Shopify Acumatica integration is an example of a prebuilt template, and if you’re looking to connect [inaudible] and there’s no prebuilt integration available on our marketplace, you can use the guided user interface to intuitively build integrations you need from scratch without the need of any coding. So as long as the apps support our universal adaptors for HDTP, REST API, and FTP, but and if you’re an advanced technical user who wants to build, customize integrations through coding or orchestrate complex scenarios, the platform is– has enough depth and counts all the tools you need to get you– build your own, in detail, integrations.

So let’s move to Shopify. So, personally, I’m a big fan of Shopify. It’s one of the most intuitive, fastest growing e-commerce platforms out there. So last year they announced that there were more that 800,000 merchants using their platform. And they were the third largest online retailer in the US after Amazon and Ebay. So I don’t know what their actual standing is this year, but probably even much better. So if you’re using Shopify as your storefront, and [inaudible] as your ERP, and there’s no integration between the two applications, it means you’re still manually entering and downloading and uploading data between the two systems. So, obviously, this is very resource intensive, slow, and prone to error. And having no real-time visibility into sales orders leads to incomplete accounting books, inaccurate financial forcasting and planning. And then if [inaudible] data is not currently updated across systems in real-time, it may cause running out of stock, delay procurement, as well as selling out of stock items. And, of course, not having visibility into order data can also cause delays and errors in order fulfillment and returns, leading to unhappy customers, bad reviews, and more importantly, this all can lead to a lost revenue. So luckily, there is Celigo’s prebuilt Shopify [inaudible] integration. So this template, it comes with prebuilt flows for popular use cases that merchants are looking for. And the integration syncs data such as a customer’s orders, inventory, fulfillment, product billing, refund and cancellations between the two systems on a scheduled basis. And so, what are the benefits of integrating these two apps with Celigo? So first, having near real-time visibility into sales orders, eliminates accounting errors, and it also helps with a reliable financial forcasting and resource planning. And then processing order fulfillment, refunds, and cancellations from Shopify, between Shopify and [inaudible] without errors, helps deliver great customer experience and also generate repeat business. And then centrally managing listings across multiple Shopify stores from [inaudible], automatically updating products and inventory levels, this all insures listings are always up to date, reflect latest changes, pricing, and saves the business lots of time and also also helps maintain a healthy [inaudible] level. And also as the business grows, there is a need to evolve. So with the platform, these flows can be easily customized. New flows can be edited. New apps can be connected as endpoints to the integration to reflect any of the changes in the business processes. And natural path we see for growing companies is often, I think, more number of storefronts, international stores start selling on multiple different channels and adding more [inaudible] PL partners for fulfillment. So this can be all easily supported by the platform. And so on top of all of this, [inaudible] iPass also provides guaranteed date of delivery between the systems meaning there’s no loss data. So if there are any errors, these are held until resolved, and processes will be paused if an endpoint is down until it’s back up again. And finally, with the iPass, a user gets to easily monitor, troubleshoot, and manage all their integrations on the platform. And [Manan?], he will show us all of these and more in detail. So now I guess I’ll just hand it off to him so that he can walk us through the product here. [silence]

Okay, [Manan?], you are the presenter. All right. Thank you. Okay. So I hope everyone can see my screen. I’ll be walking you all through this legal platform, on a very high level explaining what we offer in terms of all those logos that we had seen. All right. Okay. So as you jump into this legal marketplace, you’ll see there’s a ton– there’s a ton of logos available out there that we’ve previously integrated with or worked with in some capacity or have some kind of [inaudible] managed or template [inaudible] solutions. We’ll be focusing on one of them today, and that’s going to be the Acumatica one. So I’ll just go and click into it. And you’ll see there’s a wide range of Acumatica templates that we offer. And you’ll see there’s ADP, Amazon, Shopify, eBay, SAP, Magento, Salesforce, etc. Right? Today, we want to focus on the Shopify Acumatica one, and I’ll just give a quick glimpse on what the process of setting this up would probably look like. So I’ll go ahead and click on the install button out here. And then, this will give me a quick page to understand what is being installed. So I can either click on the, “Install Now,” button or I can click on the, “Read me,” which will help me understand what needs to be configured or set up while I’m integrating Shopify and Acumatica through this template. So you’ll see there’s a bunch of flows available out too, and if I click on the, “Install Now,” button, you’ll then get a quick disclaimer, just boilerplate stuff. And then, click on, “Proceed.” You’ll see a couple of options there. You can set up your Acumatica connection and then your Shopify connection I’ll show what the first one looks like. And again, it’s going to ask you to set up a new connection or use an existing one. So again, if you’re starting from scratch, you probably wouldn’t have one lying around. So you’d create a new one by just putting in your URL and then the endpoint of the username, password, etc., all right?

It’s pretty straightforward, nothing too fancy to [inaudible] you. You can go ahead and hit cancel. In that case, it’s best unsaved. And then we move onto the next step, which is the Shopify connection. So assuming that we set up the Shopify connection and it’s equally easy to do that, you would then be taken into a new page, which is the Shopify Acumatica Integration template. I have remodeled some of these flows for ease of viewing, really. And I will walk through this, again, on a pretty high level. So there’s a bunch of integration flows available out here. But we’ll see that [inaudible] look it up in the sections, for example customers, orders, shipments, invoices, cancellations, refunds, and then handling items with items from Acumatica to Shopify, and the inventory as well, all right? So there are a bunch of flows available. There’s always a bunch of options available on how you want to manage these integrations or what level of detail you would possibly want to go into. Now as a platform, we do offer a lot of features in terms of other management, user management as well. And I would definitely like to circle back on that once we’ve walked through the core pieces of the Shopify Acumatica Integration, okay? So just to give an understanding, one of the most important pieces is to set up your– or rather to make sure that you’ve got customer data flowing between Shopify and Acumatica. So in this case, let’s say that we were looking at the Shopify Acumatica process. I have the option of clicking on to the flow name. And it will give me a high-level understanding of what is happening, right? Again, you don’t need to be a technical user for this. And you’ll be able to see that it says Shopify Export, and then import in Acumatica. So it’s again with the logo and the labels out here, we can get a very quick idea of what’s going on even if the flow name doesn’t give us that idea, all right? Now, for the ones who do want to get more technical, you do have a ton of options. But you can change the endpoint information or you can add scripts or transformations. You can add filters on the Shopify site. You can add photos before it’s coming into Automatica as well. So there are really a ton of options available. This platform is equally adept for technical users as well. So if someone loves and enjoys code, please feel free [laughter] to jump in as well, okay? I’ll go back a page and look at my flows again. So the process of really getting data from Shopify to Acumatica is still pretty straightforward. So another tab will open up a Shopify page where we will see a customer record out here. So there are a few elements where we see the name of the customer, the address, the phone number, email address, etc., right? But how do we make sure that we bring that information to Acumatica in this case? So it’s as simple as clicking on the three dots of the file right out here. And then, we’ll see another dropdown that says– it gives us a few more options. We look at the ones which talk about mappings. Now, these mappings are the most important in this case because we want to change or view how we’re bringing in the data from Acumatica to– from Shopify to Acumatica Acumatica. Give me just a moment. I am using one of our beta user interfaces, so you might just notice a tiny glitch out there. Okay? Awesome. All right, so we’ve got this mapping window pulled up where we can see on the left-hand side, we’re going to notice that there’s an export column for Shopify, and then on the right, we’ll see that there’s an import for Acumatica. So we can see the different fields that are coming out, for example, email, going to email, phone number, going to phone number again, and then we’ve got all these mappings and other address and any additional information as well. Now the good thing out here is that if you want to access more Shopify fields, all you need to do is just go ahead and type them in. So for example, things like note, or let’s say customer comments or age, etc, and then you will be able to pool that information into Acumatica. Out here, you’ll see the drop-down lists available as well. And the process of choosing how you add mappings, for example, you notice in certain cases, the values have been hardcoded . In another case, you’ll notice that we are actually deploying some kind of an expression or a formula in this case, or we’re just hosting it directly from Shopify. Again, this is keeping things very simple for, again, basic processes. But if somebody does want to go into some more details or add a lot more logic before value is computed back into Acumatica, they definitely have the options of doing that. Right? So again, these laws or rather these integrations would be in sync and as frequently as every 15 minutes all the way up to a week.

So if I were– let’s say I were to have created a customer record on Shopify, and then every 15 minutes, I have up customers coming back into Acumatica. In that case, I would then see another record in Acumatica for that corresponding customer. So on my page right now, I pulled up a particular customer record in Acumatica, and you will see some information out here as well. You’ll see the name, the email address, the phone number, the physical address as well. Again, all of this data has come in from Shopify, if there are any other fields you’d like to set up or any other logic you’d need. Again, it’s very easy to do that from the user interface itself. Okay? So now that we’ve understood how this customer or rather the entity information flows into Acumatica, the next step would probably be for this particular customer to make a purchase. Now, let’s go into another tab of Shopify where we’ll see a particular sales order or an order pulled up in Shopify. So again, I create an order from the back-end of Shopify. Again, single product order $10 order to the same customer free shipping. And through a similar exercise of mapping the pages or the fields between the Shopify order and the Acumatica sales order. I’m now with Acumatica sales order out you. So again, key elements out here would be that we’ve got the Shopify ID stored within a customer rather within the external field and in Acumatica we’ve got the same product one unit $10. We’ll go into financial– we’ll go into payment settings, we’ll see that the payment was cashed because I kind of paid offline for this. And the shipping section again, we’ll see the ship to information available as well. And if you want to see any specific ship via details, you can see that as well. So again, just keeping this on a very high-level [inaudible], use the kind of data you will see now, going back into the Sligo integration page. I’ll see that we are looking at orders from Shopify to Acumatica. And again, we’ll click into the– we’ll take another field mappings for a quick moment. And then you will see the processes involved out here as well. So there are a couple of views that will help you understand what’s going on.

Now, as you can imagine, it’s not necessary for someone to have a customer account in Shopify for them to place an order. So in that case, they may still go on to the website, place an order as a guest or create an account after creating an order whichever is applicable. And in that case in automatical. As your ERP, it’s not going to [laughter] really accept an order without a customer. So even [we took an?] additional step out there where we import the customer first, and then attach the sales order against it. Now, let’s go ahead and look at the sales order mapping. And you notice that it does look identical to what we had seen for the customer that occurred as well. So again, you see the billing information, shipping address, the balance of the transaction, and the line level information as well. You can add the gateway of the transaction or the payment method, the price, the discount, etc. So again, all those basic things are coming in. I do want to give a quick reminder that a lot of these fields came out of the box. I barely had to make any changes from the first time I set up this configuration. Anything out there was just tweaking it to my personal preferences or just bringing in some mandated fields that was set up on our account. Okay. Now, there are a bunch of more floors available. Some more so do happen to be bidirectional as well, right– for example, all the management or post-order management– for example, cancellation or refunds. It’s going to be taking things within the same direction where we choose the automatic endpoint and choose the Shopify endpoint, and then find the direction. But it goes one way or both ways in this case. And then, choose the different fields that we want to map. Now, again, all of these came out of box with the template that we see. And I do want to give another remidner that they’re highly-customizable in this case. So if you feel that you need a use-case that’s very unique to your account that your company processes, you can definitely go into the flows and figure that. Now, what happens around that sort of use-cases that simply underdress [inaudible], right? The process is pretty simple. We’re going to– we create a new flow. Again, that’s to say that we’ve got the Shopify endpoint. And let’s click on the imports section on the automatical site. And then, you would see the different sub ABIs available with an automatical. I [inaudible] all the way from adjustments to events and employees and invoices, etc. So you can go in and configure additional flows as you need to, talking about the Shopify site, not to leave that one out. We will see the different endpoints available out here as well. So we see the– again, the ABI name. We will see– again, you can go and get billing information, customers, events, discounts, store-level information, orders, products, etc. But again, there’s tons of options. And I think at this point in time, I’m going to get slightly more technical for the folks who might be interested in this. So you can see that when we are pulling in a list or rather when we are asking Shopify for some data, you can see the request that’s being formed here as well. And then, you will see the response that comes out of Shopify. So it’s very helpful within this user integration to really understand how we’re making calls to the APIs as well and what kind of data you’ll essentially be working with. So for example, if you’re getting a list of all the customers out of Shopify, you have all the fields that are now available, right? It’s, again, important to leverage it, for example, the customer age, the total dollar amount that they spend on your store, etc., right? I will go back into another page and just some of these additional options for those technical users. So let’s say, for example, I wanted to change how I’m sorting my fields. Right? Now, if you notice that the address information is coming in at the line or at an [inaudible] level, I have the option of repurposing these fields at the body level if I need to. So, as you can understand, it’s important when you [inaudible] additional use cases, I would, again, for the business users, you probably won’t have to go through these steps, but again, if you do ever double up or [inaudible] whom you want to collaborate with, then make a lot more unusual use cases come through you have those options. I can define some [inaudible]. So, in this case, I was adding ahead of the [inaudible] unique customers with the last name Acumatica were coming in. I can add pretty much anything else, number of orders greater than zero. All right. So that way, no customer– if a customer could [inaudible] order– or they couldn’t Shopify or did not place an order, you can control whether they are loaded into shop, into [accumatic?] or not, and through an option of defining some hooks out there or using some javascript , javascript object, you can change how you’re bringing the customer information as well. So, again, there’s different transformations or different use cases that you may want to execute, and again, I’m not that– I’m not a programmer [inaudible], so I don’t fully understand what this is doing, but again, it’s doing something and I think that’s where your technical beings are going to be able to kick in and provide some more input, and always, if you need to provide additional steps, it’s as simple as creating one more button [inaudible] or one more [tile?], and you’ll see a list of all the applications that you can indicate this with. So it’s not necessary that you stop at Acumatica. You can even ping yourself on [Slack?] saying that, “Hey, I have a new order to look at,” or a new customer to look at. Okay? So now, again, let’s flash back to the business user. We got a little bit too technical in that case, so let’s see how we can manage these flows. Right? One of the most important things within this automation is that flows are running, but what happens if something does go wrong? So in that case, let’s click on the dashboard out here where you see a list of all the flows that had runs. So let’s start on the bottom. You’ll see a verticle flow customer, Shopify to Acumatica. You’ll see that the particular record then, there was one success. Then next time I land an order from Shopify to Acumatica, there was, again, nothing that came up. So you see zero successes, and then, so on. Let’s look at the color coding as well. It might be a little faint, but again, it’s still there. You’ll see completed, cancel, completed in blue, which means that there was something that was an error but I resolved it, but if you click on the view message, you’ll be able to see that we load the error messages for you as well. Right? So in the case, again, I wanted to intentionally throw an error so I can. again, talk about this and, again, explain what this means. So you see that the error came in from Shopify in this case or the shipment flow. Again, I intentionally inserted an error [inaudible] to make sure that I’m able to demonstrate or give you an idea of what errors on our platform look like as well. So you’ll see the– if I click under this actions button, you’ll see all the data that came in. [inaudible] was going to into Shopify in the case. A few of you might recognize this as Acumatica later, and that’s very much what it was. The direction of my flow was Acumatica to Shopify. Okay? The other thing is you do have the option of selecting the flow you want to focus on. So if I at one point of time, we just want to look at customers from Shopify to Acumatica using those records only. You can see the ones which contains an error or the ones which were canceled, etc. So again, you’ll see the timestamps coming as well. You’ll see how long the flow took, and when it was completed. Now, moving into another important management-related activity within your integration is going to be user management. So as you come here, you’ll notice that I have a few accounts set up. So again, I gave myself enough access for my two additional accounts. But say in this case, a coworker of mine, who is again a non-technical user has a different level of access. So again, [Unom?] is pretty straightforward to understand, manage is where you will have users who can make changes to the integration. And again, given that these are two different accounts of my own, I want to be able to access this integration from wherever I am. However, my non-technical coworker loves to see– or have access to all of these tiles on my account. But again, it’s a non-technical user. So I wouldn’t want it to make changes. So I’ve set up here to access us monitor. And you can add as many users as you want. And coming back into my home page, you will see a bunch of my integration set up out here. And you can see that on the top we have a tiny– we have a tiny display which tells you whether there are any errors or not. So for example, my Shopify to Acumatica integration does not have any errors. And it is success. It is showing all success. But if we look at my Shopify-NetSuite integration, you’ll see that there’re [inaudible] sitting around. However, if you look at my Magento integration, you’ll notice that the connection was down.

So that is a lot of your user management that kicks in out to your as well. And yeah, I think that should be pretty much it. [Ebro?], I can turn this back over to you. Okay. Let’s me take back the presenter mode. Just one second. Okay. Yeah. Thank you, Mana. So if you have any questions, so you can still talk them in the chat window, we will be answering them shortly. So we already have couple of questions here. And so before we move on to the questions, I would like to point you to our website. So you can go to a Celigo.com. And so you can– oops, okay. So you can get a free account and start building limited number of flows between any two applications. And also, you can go to our marketplace and search for our pre-built integrations. And so one last note–okay. If you’re Celigo user or if you just started using Celigo maybe the free trial, we have office hours twice a week. So you can register and ask our experts any questions you have about the platform, about how to build your flows, etc. And yeah, so now I see, yeah, we have a bunch of questions. So let’s me go through those. One second. So okay, one question is our some fields supported, so in Shopify they are known as metafields. Yeah. So again, if you don’t mind, can I share my screen again? Sure. Just let me make you a presenter. Just one second. Okay. Here you go. Thank you. All right, so yes. So it is easy to support that. It’s not coming in with this template as such, but the process of adding that would pretty much be to get a list of all the Shopify customers, get the unique Shopify customer ID, and then [correlate?] the matter fields against that customer. That’s pretty much how the Shopify process works in this case and then you can drop that big matter field information into a custom field on the Acumatica site. So yes, customs fields should in that way be supported. Okay, so another question. Can I get notified if there is an error?

Definitely. So if we click into the settings page out here, you’ll see that there are a few more options available and we can click into the notifications. So the good thing is I can be notified if a connection goes offline, so I can choose which of the connections I’d like to be notified about, and then I can see the different flows that are running on my account and I can – again, it’s a multiselect – click on all the flows that would be pertinent to me as a particular user and be notified of them. Again, we are going to be notifying you that there is an error, but we don’t want to take the data out of the integration plan [pump?] for your own security. And another aspect to this is that let’s say there are three user profiles. Again, someone in finance, someone in the warehouse, someone in the merchandising team, set up as users on my account. Each of these users can cherry-pick their own notifications and the emails will be triggered to that particular account. So that way somebody on the merchandising team doesn’t necessarily get notified when there’s a customer or an order management-related error. And again, focusing on different functions as well. And of course you do have the option of picking an alias email address within your company or a distribution list and then just blasting everyone. So someone’s out of the office, they can let another person handle this for them. Okay, so here’s another question. For a credit card charge, authorization starts on Shopify, captures during shipping, invoicing in Acumatica. Does this work? Yeah, that should work. I would like to clarify that if you are looking to do the final capture within the Acumatica system, that is possible. However, if you were looking to let Shopify keep control of the billing events and run the capture after shipment, that is also possible. We do have a [flow out?] which takes invoice data from Acumatica to Shopify. And in this case you can some add some logic which notifies Shopify that the capture needs to be done through their site or if the capture was already done and it’s simply a notification coming in that another external system completed the payment capture. Coming into the process of the [self?] capture is that from the Shopify system you do have the option of pulling in the art code for integration purposes, and you can drop it into Acumatica, run your payment application on your payment processor within Acumatica and capture the funds as you would normally do so. And again, the shipping process will just continue as it would, where you can take the shipments from Acumatica and post them over to Shopify. Okay, so here’s another question. If you have custom fields within the DAC, so data access classes within Acumatica, do those show up [inaudible]? I believe they will definitely love to get back to you on that one. Okay. So another question is, if you edit custom fields, do they show up within the mapping? Yeah, I mean, the fields by themselves, we’re going to be bringing in the field, the field label. But if you added the contents of the field, you wouldn’t see that within the mapping window, but you would eventually see it flowing between the systems. If you were to change the name of a particular field label, you have the option of clicking on a button out here, which says Refresh. And then we’ll be able to– again, every time you load it, pull up a window, you will see the new field showing up. And then you can click on Refresh out here, and then we can grab our list of new fields as well. And likewise, on the Acumatica side, we just do a constant refresh on [US?].

Okay, another question is where do you go to set up how often the flows run? So you do have the option of choosing the schedule for it. So for example, let’s say that I have this button out here– or let me just go and click into this. There’s a tiny calendar icon on the top right, so I can click on that, and then it will give me the flow schedule. So I’m choosing my timezone. And then, I can choose the frequency. So let’s say I’m running this every 15 minutes, I can choose what time it starts, say between 02:10am and then 05:55pm, or I can just run this down the clock as well. If I want to get a little bit more particular with that, I can click into the [cron?] expression. Again, this is for slightly more technical users but very easy to pick up. But I can select the flow frequency so it can run every five minutes. If you use a [cron?] expression, 10 minutes, you can set it on every five hours at the 15th minute of the hour. You can choose a particular day as well as on the sixth day of the month. You will have this run every 48th minute of the hour, etc. So, again, you can get pretty crazy with this. Or you can keep it simple and just choose a simple frequency as every 15 minutes or once a day or once a week as you’d need to. Okay, so there’s a more high level question here and I can try to answer that. So the question is, can the iPads handle large abnormal sales volume? Yeah, definitely. I mean, we often see sales volume for our customers are drastically increasing during a holiday sales and our system is robust enough to handle the large data flows. And one last question, can I use [Seligos?] iPads to centrally manage multichannel stores such as Shopify and Amazon? And yes, you can add multiple Shopify storefront to your integration as well as other third party storefront marketplaces such as Amazon and automatically manage all through Acumatica. And yeah, if you have questions, still you have some time to type them in, otherwise, yeah, I think that’s all with the questions today, [Mana? ]. So this brings us to the end of our webinar. So thank you again for joining us today. And please feel free to visit us on our website, [seligo.com?]. Also, you can contact us and tell us about your integration challenges or ask us any questions you have at [[email protected]?]. So thanks again for

About The Speaker

Mannan Khanna

Sr. Impementation Consultant
Celigo

Ebru Saglam

Product Marketing Manager
Celigo

Meet Celigo

Celigo automates your quote-to-cash process with an easy & reusable integration platform-as-a-service (iPaaS), trusted by thousands of eCommerce and SaaS companies worldwide.

Use it now and later to expedite integration work without adding more data silos, specialized technical skillsets or one-off projects.

Q

Related Resources